2

在我在网上找到的登录脚本中,创建者添加了此功能以防止 SQL 注入攻击。

function Fix($str) {
    $str = trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

由于我读到它magic_quotes_gpc被(或已经)删除,感觉这个功能有点过时了。不只是简单地使用mysqli_real_escape_string($user_input)增加足够的安全性吗?

4

2 回答 2

2

mysql_real_escape_string在所有情况下都不够,但它绝对是非常好的朋友。更好的解决方案是使用准备好的语句

//example from http://php.net/manual/en/pdo.prepared-statements.php

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

// insert one row
$name = 'one';
$value = 1;
$stmt->execute();

另外,不要忘记可用于丢弃任何无效/可疑字符的HTMLPurifier 。

mysql_real_escape_string() 与预处理语句

mysql_real_escape_string()容易受到同类问题的影响 addslashes()

来自Chris Shiflett(安全专家)的回答

于 2012-06-14T07:00:22.573 回答
1

magic_quotes_gpc在 5.3 中已弃用并在 5.4 中删除。如果您的代码用于分发(即您无法控制使用它的环境),最好考虑到它可能会在 5.3 中运行并启用魔术引号。如果这是内部应用程序并且您可以控制环境,并且您知道魔术引号已禁用,则没有必要检查它们。

于 2012-06-14T07:00:33.713 回答