首先,我完全不确定,但大多数 SQL 注入、XSS 攻击等都是通过 URL 使用 GET 参数发生的。
所以我想知道,如果我可以将它们全部清除并检测是否有非法单词,如果是,则退出到 404 页面。
所以这是我的功能:
private static function cleanPath()
{
if (isset($_GET))
{
$count = 0;
$illegal = array
(
'<?', '<?php', '?>', '(', ')',
'{', '}', 'SELECT', '*', 'FROM',
'WHERE', 'select', 'from', 'where',
'DELETE', 'delete', 'echo', 'print',
'html', 'div', 'class', 'function',
'prepare', 'query', 'execute', 'exec_',
'_', '++', 'bindvalue', 'static',
'$'
);
foreach ($illegal as $i)
{
foreach ($_GET as $key => $value)
{
$check = strpos($key, $i);
if (!$check)
{
$count++;
}
}
}
if ((int)$count == count($illegal))
{
return true;
}
else
{
echo $count . ' array count:' . count($illegal) . '<br />';
return false;
}
}
}
但似乎该功能无法正常工作。
我输入这个链接:?section=register&sec
它会返回假。
当我输入此链接时:?section=register§ion
它将返回 true,如果我输入除部分之外的任何内容,它将返回 false。为什么这样做?
如您所见,我已经对其进行了调试,这就是它返回的内容:
62 array count:31
所以$count = 62 and array count = 31
为什么会变成62?看起来它的计数器翻了一番。我做错了什么?