我写了这个简短的函数来防止my_sql注入,因为它的重要性我只想与其他人仔细检查这将按照我的意图运行.
foreach($_REQUEST as $key => $value) { $_REQUEST[$key] = stripslashes($value); $_REQUEST[$key] = MysqL_real_escape_string($_REQUEST[$key]); }
好吧,你使用stripslashes()因为magic_quotes_gpc设置了吗?因此,此代码仅在设置magic_quotes_gpc时有效!我建议你关闭它,不要使用strislashes()调用.
但请注意,没有什么比“普遍消毒”更像.我们称之为引用,因为这就是它的全部内容.
在引用时,您总是引用某些特定输出的文本,例如:
> mySQL查询的字符串值
>喜欢mySQL查询的表达式
> HTML代码
> json
> MysqL正则表达式
> PHP正则表达式
对于每种情况,您需要不同的引用,因为每种用法都存在于不同的语法上下文中.这也意味着引用不应该在PHP的输入中进行,而是在特定的输出中进行!这就是为什么像magic_quotes_gpc这样的功能被破坏的原因(总是保证它被关闭!!!).
那么,在这些特定情况下,用什么方法来引用? (随意纠正我,可能有更现代的方法,但这些对我有用)
> MysqL_real_escape_string($str)> MysqL_real_escape_string(addcslashes($str,“%_”))> htmlspecialchars($str)> json_encode() – 仅适用于utf8!我将我的功能用于iso-8859-2> MysqL_real_escape_string(addcslashes($str,’^.[] $()| *?{}’)) – 在这种情况下你不能使用preg_quote,因为反斜杠会被转义两次!> preg_quote()