如何判断mysql_real_escape_string是否正常工作?

时间:2010-02-18 14:20:24

标签: php mysql

正如标题中所说,如何判断mysql_real_escape_string是否正常运行而不等待被黑客攻击?

3 个答案:

答案 0 :(得分:2)

检查从中获取的值。

向其发送一些应该转义的文字,例如Ed O'Neil(应该返回Ed O''NeilEd O\'Neil

答案 1 :(得分:1)

创建一个单元测试,向其发送应该转义的所有字符并检查输出。

BUT: 为什么不简单地使用PDO参数化查询? 像:

$dbh = new PDO([...]);
$sth = $dbh->prepare("SELECT foo FROM bar WHERE baz=:baz");
$sth->execute(array(":baz" => $mybaz));

这是最安全的方式,感谢PDO,它几乎和Perl一样简单。

答案 2 :(得分:1)

扩展'R' Bemrose'提供,这里有一些示例代码。请务必使用您自己的mysql凭据替换它们。

<?php
// Connect
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
    OR die(mysql_error());

$user = "Ed O'Neil";
$password = "SQL_INJECTION ';'alter table xyz';";

// Query
$query_safe= sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

// Query
$query_not_safe= sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            $user,
            $password);

echo $query_safe."\n";
echo $query_not_safe;

?>