Upsuper和我一起写一个OJ,写到user模块时发生一个常见的问题(显然是注入),就是在登陆时发生了搞笑的注入漏洞..呵呵
的确有点无语,登陆时要提交2个变量进行查询:username和password,password是事先通过MD5加密的,不用怕,主要就是username的问题了.由于我们懒,不想写复杂的过滤...SO,就出现了以下的秒方了:
直接看代码就都懂了.....
这是原本的代码段:
$query = mysql_query("SELECT username FROM user WHERE password='{$password}' and username='{$username}'", $db);
if ($urinfo=mysql_fetch_array($query)){
//Login ok!
}
很明显的注入漏洞..(username变量实现没去动,password是MD5值)
改完后的代码段:
$query = mysql_query("SELECT username FROM user WHERE password='{$password}'", $db);
while ($urinfo=mysql_fetch_array($query))
{
if ($urinfo['username']==$username)
{
//Login OK!
}
}
这样就巧妙的避开了危险变量的引用,很美吧....(雕虫小技....)

看完了要说点啥么?