2011-04-05 60 views
1

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

SELECT fieldlist 
    FROM table 
WHERE field = '$EMAIL'; 

我知道这是一个愚蠢的问题,但我不知道答案!

回答

0

输入input = $EMAILasdf' or '1'='1在输入并提交,看看你是否得到真正的结果。

所以生成的查询是

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

要检查,如果密码不空。

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 
+0

在用户名或密码字段? – EnexoOnoma 2011-04-05 04:21:27

+0

@Punkis同时检查,如果你有魔术引号关闭或 – 2011-04-05 04:21:50

+0

另一个小问题。我有一个你输入密码的页面。然后登录页面检查密码(abcdef)是否与我在表单中写入的密码相同。 abcdef不是编码,只是一个简单的if语句。 – EnexoOnoma 2011-04-05 04:29:24

0

你会提交可疑的字符串到您的登录表单。

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

+0

嗨,在用户名或密码箱? – EnexoOnoma 2011-04-05 04:21:44

+0

@Punkis:两者。还有其他地方你接受用户输入。 – 2011-04-05 04:26:47

+0

另一个小问题。我有一个你输入密码的页面。然后登录页面检查密码(abcdef)是否与我在表单中写入的密码相同。 abcdef不是编码,只是一个简单的if语句。 – EnexoOnoma 2011-04-05 04:28:59