我为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