不安全的登录脚本 - 如何保护

ren*_*thy 1 php mysql code-injection

我正在研究一个可能被sql注入的项目(一个用户报告了它).

以下是登录脚本的一部分:

  $loginemail = $_POST['loginemail'];                 
            $loginemail_sql = mysql_real_escape_string($loginemail);                

            $password = $_POST['loginpass'];                 
            $password_sql = mysql_real_escape_string($password);                

             //get user data
            $q = 'SELECT uid, full_name, score, status FROM users WHERE email="'.$loginemail.'" AND password="'.$password_sql.'" LIMIT 1';
Run Code Online (Sandbox Code Playgroud)

我想现在,如果这是可以注入的代码的一部分?是否存在$ loginemail和$ password被错误处理并且可能包含一些dangerouse"SQL部分"的问题?

Mad*_*iha 6

让我们来看看:

请不要mysql_*在新代码中使用函数.它们不再维护,并且已被正式弃用.看到红色的盒子?了解准备好的语句,并使用 PDO MySQLi -本文将帮助您确定哪些.如果您选择PDO,这是一个很好的教程.

对于初学者.

其次,你是逃避$loginemail,但使用非转义版本(而不是$loginmail_sql).

第三,您的代码暗示您将密码按原样存储在数据库中.你不应该.如果攻击者掌握了数据库,您的密码就会受到损害.您应该散列密码并在那里存储哈希.