如何测试我的简单mysql登录表单的sql注入


How to test my simple mysql login form for sql injection?

我为PHP和mySQL项目创建了一个简单的登录表单。我阅读了有关SQL注入和XSS的安全性和信息。我如何用这些东西测试我的表单?我是说我把它放在哪里了?我发现像这样的' or 1=1–和SQL查询,如

SELECT fieldlist
  FROM table
 WHERE field = '$EMAIL';
我知道这是一个愚蠢的问题,但我不知道答案!

对于输入input = $EMAIL,输入asdf' or '1'='1的值并提交,看看是否得到真实的结果。

生成的查询是

SELECT fieldlist
  FROM table
 WHERE field = 'asdf' or '1'='1';

检查password是否为空。

if(!isset($_POST['password'])) 

如果

$username = trim($_POST['username']); //also turn magic quotes
            //or add slashes to prevent sql injection
$password = md5(trim($_POST['username'])); //encrypt the password

SELECT *
FROM user
WHERE username = `$username` AND
password = `$password` LIMIT 1;
if(mysql_num_rows($result)) //if the count is 1, then, the the user exists
//do the login

您将在登录表单中提交可疑字符串。

从那里,字符串' or 1=1-(或任何你想测试)将被发送到您的服务器,和PHP,如果没有正确设置,将发送该字符串直接到您的MySQL数据库,在那里,如果它是有效的SQL,它将被执行。

您将通过表单本身输入恶意代码,以便将其发送到PHP,然后发送到MySQL。如果恶意代码改变了您的查询,那么您的代码将容易受到SQL注入的攻击。看看mysql_real_escape_string()。同时,读一读这个,帮助你开始:

  • http://en.wikipedia.org/wiki/SQL_injection
  • http://www.php.net/manual/en/function.mysql-real-escape-string.php