PHP和Ajax字符串输入/输出处理场景
我还不熟悉PHP中的字符串处理。下面是我目前正在做的事情的示意图。最后,我希望得到一种通用的方法来处理以下场景中的字符串。注意,在这个场景中,文本往往是大量的数学符号和代码语法 字符串和整数是通过基于HTML的标准表单输入的(我忘了在图表中提到这一点) 步骤A当前使用:PHP和Ajax字符串输入/输出处理场景,php,ajax,string,validation,html-entities,Php,Ajax,String,Validation,Html Entities,我还不熟悉PHP中的字符串处理。下面是我目前正在做的事情的示意图。最后,我希望得到一种通用的方法来处理以下场景中的字符串。注意,在这个场景中,文本往往是大量的数学符号和代码语法 字符串和整数是通过基于HTML的标准表单输入的(我忘了在图表中提到这一点) 步骤A当前使用:mysql\u real\u escape\u字符串(输入) 步骤B目前使用: htmlentities($string2) $string1 整数是零 问题: 关于MySQL注入,MySQL\u real\u escape\
mysql\u real\u escape\u字符串(输入)代码>
步骤B目前使用:
htmlentities($string2)
$string1
- 整数是零
问题:
关于MySQL注入,MySQL\u real\u escape\u字符串是否足以防止这种情况李>
我仍然需要完成String1的输出处理。请注意文本实际上是如何在两个不同的位置使用的:HTML和Canvas。步骤B中的htmlentities会使代码语法正确地出现在HTML5画布上,但不会出现在HTML中。反之亦然(HTML语法会破坏页面)。是否有与PHP的Htmlenties相同的JavaScript函数李>
应验证int表单以确保它是int
当我使用这个不是标准减号字符('-')的字符('-')时,String2将“null”输出到HTML李>
魔法引号已关闭。但是,如果我在启用了它的服务器上运行脚本,我需要一个简短的脚本:if(magic quotes已启用){关闭magic quotes}
关于表单验证,我忘记了什么
如果我的方法完全错误,请纠正我的错误,并帮助我一劳永逸地解决这个问题。如果您认为有帮助,可以用A、B、C、D和E来描述您的解决方案。提前谢谢
对
-
-
使用htmlspecialchars
,不必使用htmlspecialchars。您得到的是NULL,因为您可能有字符集问题
如果您看到启用了magic quotes,那么已经太晚了,需要手动反转Quote
我还是不明白我想做什么
mysql\u real\u escape\u string()
将正确地转义您的代码
(A) 在JavaScript端,jQuery的.text()
方法将在将代码输出到页面之前正确地转义代码。(B) 查看PHP.js。它是一个复制PHP功能的JavaScript库,包括htmlentities()
和htmlspecialchars()
李>
对于整数,您可以使用ctype\u digits()
函数来确保它是一个数值;您还可以使用某种形式的类型暗示:$int=(int)$int代码>
我同意那位先生的建议,他建议尝试htmlspecialchars()
尽量避免使用魔术语录。这是一个可怕的特性,将在PHP的未来版本中删除。如果您需要包含针对魔法引号的保护,请尝试类似于下面代码的内容(见文章底部)
很难说没有看到你的代码,但是看起来你走的是对的
-
1) 不确定这是否足够,但您也可以尝试使用预处理语句(PDO),如果您在同一脚本中多次使用某些查询,这将保证完整的sql注入保护+小的性能提升
3) 只需转换为int-(int)$string
5) 哇,那一定是一些过时的服务器
我觉得你在安全方面反应过度了。
如果您确实需要安全保护,请在与数据库交谈时使用准备好的语句,并使用某种HTML净化器(如下图:)来清理HTML输出(防止XSS)1)在内部保持字符串“原始”。2) 转义字符串的正确使用。还有,我不得不恭敬地不同意你关于安全的声明。我不认为约翰做得过火,因为他所列的一切都不是真正的不同寻常。安全应当是发展进程的一个组成部分;有些人错误地将安全性视为一项功能。我的意思是他反应过度,认为如何保护每一个可能的层(这是我从图纸中推断出来的),而只保护数据库输入和html输出(防御XSS)就足够了。
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
$func = function(&$val, $key) {
if (!is_numeric($val)) {
$val = stripslashes($val);
}
};
array_walk_recursive($_GET, $func);
array_walk_recursive($_POST, $func);
array_walk_recursive($_COOKIE, $func);
unset($func);
}