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!
}
}

这样就巧妙的避开了危险变量的引用,很美吧....(雕虫小技....)

, ,

Random Posts

看完了要说点啥么?