这段代码实际上是否可以用于SQL注入?
问题描述:
可能重复:
PHP: the ultimate clean/secure function这段代码实际上是否可以用于SQL注入?
我发现这个代码片段在这里:http://snipplr.com/view/12853/clean-variables-from-sql-injections/
笔者主张:
这个小功能可以帮助对抗常见安全问题与SQL注入,它可以消毒任何像$ POST,$ GET,$ _SERVER等全局变量并转义不安全的字符。
此代码是否安全?
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..
请告诉我这是否是安全的,“因为它看起来陪审团操纵我。
答
通用代码清理功能总是一个坏主意。他们会以某种方式破坏您的数据。切勿使用它们;在数据使用之前对数据进行清理,使用正确的卫生方法进行预期的使用。
答
只需使用mysql_real_escape_string
如果需要特殊字符转义为MySQL数据库。我想其他数据库也支持类似的功能。
这种剪切尝试了一些愚蠢的替换,可能相当安全,但也可能会混淆你的数据。为什么重新发明*?
答
为什么不使用数据库的内置转义/参数化功能?我同意它看起来像是陪审员一样,随着制作数据库库的人建立起来的功能。
答
这不安全(不存在addslashes
或mysql_real_escape_string
),性能也不是最佳(每个变量都要求调用get_magic_quotes_gpc
)。
这是不安全的。 - – 2011-05-28 22:07:36
@Alix,我99%肯定 – Johan 2011-05-28 22:09:00
99%确定它是borken,即:-) – Johan 2011-05-29 20:25:28