0
首先,我根本不確定,但大多數SQL注入,XSS攻擊等都是通過URL使用GET參數發生的。URL檢查函數返回false? PHP
所以我想知道,如果我可以清理它們並檢測是否存在非法字詞,如果是,退出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
它會返回false。
當我進入這個鏈接:?section=register§ion
它將返回true,如果我輸入任何東西,除了部分,它會返回false。 它爲什麼這樣做?
,你看,我已經調試這一點,這就是它返回:
62 array count:31
所以$count = 62 and array count = 31
爲什麼它去62?看起來它是櫃檯翻一番。 我做錯了什麼?
你不會過濾每一個不好的單詞,任何嘗試這樣做都是徒勞的,爲什麼不把白名單好詞彙 – Anigel
這個問題已經解決了。使用[PDO](http://www.php.net/manual/en/class.pdo.php)確實更容易。 – Blazemonger
你可以這樣做,或者只是使用PHP/PDO和htmlspecialchars()來防止XSS –