sql-injection urls,是一个参数长度的安全问题?

Kzq*_*qai 7 php sql-injection parameter-passing

我得到了很多涉及sql注入尝试的点击,涉及越来越长的参数.我限制php中的参数将它们转换为正整数或零,但我不确定是否存在某种涉及真正长参数的技巧可能会导致我出现问题(缓冲区溢出问题?).

我知道php中的suhosin补丁有一些过长的参数补丁,虽然我目前还没有.我应该怎么做才能保护自己免受这样的情况(来自我的日志)?

ProductId=47&ItemId=-1025+UNION+SELECT+0x6d6567613164756d706572,0x6d6567613264756d706572,0x6d6567613364756d706572,0x6d6567613464756d706572,0x6d6567613564756d706572,0x6d6567613664756d706572,0x6d6567613764756d706572,0x6d6567613864756d706572,0x6d6567613964756d706572,0x6d65676131064756d706572,0x6d65676131164756d706572,0x6d65676131264756d706572,0x6d65676131364756d706572,0x6d65676131464756d706572,0x6d65676131564756d706572,0x6d65676131664756d706572,0x6d65676131764756d706572,0x6d65676131864756d706572,0x6d65676131964756d706572,0x6d65676132064756d706572,0x6d65676132164756--
Run Code Online (Sandbox Code Playgroud)

Phi*_*off 1

您可以使用intval()来验证用户输入。如果解析失败,它将以整数形式返回输入或 0。在你的例子中就是后者。

$filteredItemId = intval($_GET['itemId']);

if($filteredItemId <= 0) { /* invalid id given */ } else { /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)