一尘不染

PHP mysql注入保护

mysql

我写了这个简短的函数来防止my_sql注入,因为它的重要性,我只想与其他人仔细检查这个函数是否可以按我的预期工作。

foreach($_REQUEST as $key => $value) {          
    $_REQUEST[$key] = stripslashes($value);
    $_REQUEST[$key] = mysql_real_escape_string($_REQUEST[$key]);
}

阅读 453

收藏
2020-05-17

共1个答案

一尘不染

好吧,您使用stripslashes()是因为magic_quotes_gpc设置了吗?因此,此代码仅在magic_quotes_gpc设置时才有效!我建议您关闭它,不要使用strislashes()调用。

但请注意,没有什么比“普遍消毒”。让我们称其为 quota ,因为这就是全部。

引用时, 总是为 某些特定输出 引用文本 ,例如:

  1. mysql查询的字符串值
  2. like mysql查询表达式
  3. HTML代码
  4. json
  5. mysql正则表达式
  6. PHP正则表达式

对于每种情况,您都需要不同的引用,因为每种用法都存在于不同的语法上下文中。这也意味着 不应在PHP的输入处 进行
引用,而应在特定的输出处进行引用 !这就是诸如此类magic_quotes_gpc的功能被破坏的原因(始终确保将其关闭!!!)。

那么,在这些特殊情况下,将使用哪种方法进行报价?(随时纠正我,可能会有更多现代方法,但这些方法对我有用)

  1. mysql_real_escape_string($str)
  2. mysql_real_escape_string(addcslashes($str, "%_"))
  3. htmlspecialchars($str)
  4. json_encode()-仅适用于utf8!我将函数用于iso-8859-2
  5. mysql_real_escape_string(addcslashes($str, '^.[]$()|*+?{}')) -在这种情况下,您不能使用preg_quote,因为反斜杠将被转义两次!
  6. preg_quote()
2020-05-17