0

我正在关注有关如何创建登录系统的教程,以正确的方式创建安全登录系统。在他们在用户名字段上使用的代码mysql_real_escape_string中,然后将其作为查询传递给数据库,也就是说,

$username = mysql_real_escape_string($username);

这是必要的,因为我没有向数据库添加任何东西,我只是检查这个用户是否已经存在?

我不只是留下它的原因是当我使用上面的代码时,它会使我的文本变为空白,因此向数据库发送一个空字符串。我不知道这是为什么,所以我想,如果我能把它排除在外,我会的。

以下是关于从评论者打开数据库连接的建议(密码等已更改):

function dbConnect(){
    $connection = mysql_connect('localhost', 'username', 'password');
    $database=mysql_select_db('database', $connection);

    return $connection;
}

$username = $_POST['username'];
$password = $_POST['password'];
$password = md5($password);

$username = mysql_real_escape_string($username);

$query = mysql_query("SELECT *
      FROM members
      WHERE username = '$username'
      AND password = '$password'",dbConnect());
4

3 回答 3

1

您可能希望将PDO 与准备好的语句一起使用。准备好的语句就像 SQL 查询中的占位符,稍后您将发送将插入这些位置的数据。这使得转义字符串过时了。

正如我在上面的评论中已经提到的:每个带有用户输入的 SQL 查询都容易受到SQL 注入攻击。

于 2012-05-02T18:26:44.210 回答
1

正确的代码是:

dbConnect();
$username = mysql_real_escape_string($_POST['username']);
$password = md5($_POST['password']);

$sql = "SELECT * FROM members WHERE username = '$username' AND password = '$password'";
$res = mysql_query($sql) or trigger_error(mysql_error().$sql);
于 2012-05-02T19:22:01.027 回答
0

是的,这是必要的,因为username可能包含 SQL 中不允许的特殊字符,需要转义'/ 例如

例子:

'在用户名中不转义McDonald's会导致非法 SQL 语句:

select * from your_table where username = 'McDonald's'
于 2012-05-02T18:19:53.820 回答