我做了一个简单的功能来防止sql注入,XXS是我的代码,有什么建议吗?这对安全性足够好吗?
function mres($input){
if(get_magic_quotes_gpc()){
$input=stripslashes($input);
}
$input=htmlentities($input, ENT_COMPAT, 'UTF-8');
return mysql_real_escape_string($input);
}
我做了一个简单的功能来防止sql注入,XXS是我的代码,有什么建议吗?这对安全性足够好吗?
function mres($input){
if(get_magic_quotes_gpc()){
$input=stripslashes($input);
}
$input=htmlentities($input, ENT_COMPAT, 'UTF-8');
return mysql_real_escape_string($input);
}
这至少在两个方面是错误的:
magic_quotes
如果可以的话,完全关闭。至少你没有使用它,但$input
可能不是标量htmlentities
是用来展示的,不是存储的。永远不要为存储而编码!mysql_*
功能已弃用。当您调用它时,也不能保证您将拥有一个打开的 mysql 连接(必需)。http://us3.php.net/manual/en/function.mysql-real-escape-string.php
看看你实际上在做什么:
魔术引号是对所有传入数据的批量转义,这使您容易受到攻击,因为单独转义并不能使您的数据以任何方式“安全”。
因此,您正在清理这些批量转义...然后再次应用相同的转义:)