sql注入url,是一个参数的长度安全问题


sql-injection urls, is length of a parameter a security issue?

我收到了很多涉及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--

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

$filteredItemId = intval($_GET['itemId']);
if($filteredItemId <= 0) { /* invalid id given */ } else { /* do stuff */ }

使用准备好的语句。参数在发送到数据库之前已转义,不会造成任何损坏。

更新

同样的机制也可以应用于用户提供的其余内容。使用htmlspecialchars()来转义从用户处获得的所有数据。这也应该对XSS攻击是安全的(在大多数情况下)

我们总是检查所有输入参数。还有长度。如果你不信任它,就屏蔽整个IP。我今天有100多次这样的攻击,但由于大量的"脏话",我活了下来。如果字符串包含任何坏单词->阻止整个IP。