1

我有一个 PHP 脚本,可以在用户输入正确的登录凭据时将其登录到我的网站。但是,我注意到通过输入anything' OR 'x'='x密码框很容易注入此登录信息。

我怎样才能阻止这种情况发生?

$query = "SELECT * FROM sm_editors WHERE email = '".$_POST['email']."' AND password = '".$_POST['password']."' AND user_type != 'reader-for-approval'";
4

4 回答 4

2

您首先需要清理输入以防止这种情况发生。

该函数mysql_real_escape_string将删除所有转义字符。

看看用 PHP 清理用户输入的最佳方法是什么?问题以获取更多信息。

于 2013-02-23T13:31:34.317 回答
0

您可以对传递给查询的数据使用 mysql_real_escape_string 函数,或者使用准备好的语句和存储过程而不是旧语法。

于 2013-02-23T13:30:59.480 回答
0
$query = "SELECT * FROM sm_editors WHERE email = '".mysql_real_escape_string($_POST['email'])."' AND password = '".mysql_real_escape_string($_POST['password'])."' AND user_type != 'reader-for-approval'";
于 2013-02-23T13:33:16.757 回答
0

首先你可以使用 mysql_real_escape_string 来转义字符串。

但更好的方法是在执行之前准备好 SQL 字符串。看看 PHP PDO MySQL 连接器。你有一些方法来准备你的字符串。

$s = $pdo->prepare('SELECT * FROM table WHERE field1 = :value');
$s->execute(array(':value' => $value));

看看http://www.php.net/manual/de/pdo.prepared-statements.php

于 2013-02-23T13:37:28.247 回答