这段代码是否真的可以防止SQL注入?

时间:2011-05-28 21:43:24

标签: php sql-injection

  

可能重复:
  PHP: the ultimate clean/secure function

我在此处找到了此代码段:http://snipplr.com/view/12853/clean-variables-from-sql-injections/

作者声称:

  

这个小函数有助于解决SQL注入的常见安全问题,它可以清理任何全局变量,如$ POST,$ GET,$ _SERVER等,并转义不安全的字符。

enter image description here 此代码是否安全?

function _clean($str){
  return is_array($str) ? array_map('_clean', $str) : str_replace("\\", "\\\\"
       , htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str)
       , ENT_QUOTES));
}

//usage call it somewhere in beginning of your script
_clean($_POST);
_clean($_GET);
_clean($_REQUEST);// and so on..

请告诉我这是否安全,因为它看起来像陪审团操纵我。

4 个答案:

答案 0 :(得分:4)

通用代码清理功能总是一个坏主意。它们会以某种方式破坏您的数据。永远不要使用它们在使用之前对数据进行消毒,并使用正确的卫生方法进行预期用途。

重复:PHP: the ultimate clean/secure function

答案 1 :(得分:0)

如果需要转义mysql数据库的特殊字符,请使用mysql_real_escape_string。我认为其他数据库也支持类似的功能。

这个剪辑尝试了一些愚蠢的替换,可能非常安全,但也可能同样搞乱你的数据。为什么重新发明轮子?

答案 2 :(得分:0)

为什么不直接使用数据库的内置转义/参数化功能?我同意它看起来像陪审团,使用由制作数据库库的人建立的功能。

答案 3 :(得分:0)

这不安全(没有addslashesmysql_real_escape_string),性能也不是最佳的(每个变量都会调用get_magic_quotes_gpc)。