我已经为PHP和mySQL中的项目创建了一个简单的登录表单。我阅读关于SQL注入和XSS的安全和信息。 如何用这些东西测试我的表单?我的意思是我把它放在哪里? 我发现这样的事情' or 1=1–
和SQL查询,如如何测试我的简单mysql登录表单的SQL注入?
SELECT fieldlist
FROM table
WHERE field = '$EMAIL';
我知道这是一个愚蠢的问题,但我不知道答案!
我已经为PHP和mySQL中的项目创建了一个简单的登录表单。我阅读关于SQL注入和XSS的安全和信息。 如何用这些东西测试我的表单?我的意思是我把它放在哪里? 我发现这样的事情' or 1=1–
和SQL查询,如如何测试我的简单mysql登录表单的SQL注入?
SELECT fieldlist
FROM table
WHERE field = '$EMAIL';
我知道这是一个愚蠢的问题,但我不知道答案!
输入input = $EMAIL
值asdf' 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
你会提交可疑的字符串到您的登录表单。
从那里,字符串' or 1=1-
(或任何你想测试的)将被发送到你的服务器,而PHP如果设置不当,会直接将该字符串发送到你的MySQL数据库中,如果它是有效的SQL,将被执行。
嗨,在用户名或密码箱? – EnexoOnoma 2011-04-05 04:21:44
@Punkis:两者。还有其他地方你接受用户输入。 – 2011-04-05 04:26:47
另一个小问题。我有一个你输入密码的页面。然后登录页面检查密码(abcdef)是否与我在表单中写入的密码相同。 abcdef不是编码,只是一个简单的if语句。 – EnexoOnoma 2011-04-05 04:28:59
你会通过形式本身的恶意代码进入,所以它被发送到PHP,然后到MySQL。如果恶意代码改变了你的查询,那么你的代码就容易受到SQL注入的攻击。看看mysql_real_escape_string()
。此外,这给读,以帮助您开始:
在用户名或密码字段? – EnexoOnoma 2011-04-05 04:21:27
@Punkis同时检查,如果你有魔术引号关闭或 – 2011-04-05 04:21:50
另一个小问题。我有一个你输入密码的页面。然后登录页面检查密码(abcdef)是否与我在表单中写入的密码相同。 abcdef不是编码,只是一个简单的if语句。 – EnexoOnoma 2011-04-05 04:29:24