0

我做了一个简单的功能来防止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);
}
4

2 回答 2

2

这至少在两个方面是错误的:

  1. magic_quotes如果可以的话,完全关闭。至少你没有使用它,但$input可能不是标量
  2. htmlentities是用来展示的,不是存储的。永远不要为存储而编码!
  3. mysql_*功能已弃用。当您调用它时,也不能保证您将拥有一个打开的 mysql 连接(必需)。

http://us3.php.net/manual/en/function.mysql-real-escape-string.php

于 2013-01-24T06:40:26.633 回答
0

看看你实际上在做什么:

魔术引号是对所有传入数据的批量转义,这使您容易受到攻击,因为单独转义并不能使您的数据以任何方式“安全”。

因此,您正在清理这些批量转义...然后再次应用相同的转义:)

于 2013-01-24T07:12:20.970 回答