まず、よくわかりませんが、SQL インジェクションや XSS 攻撃などのほとんどは、GET パラメータを使用して URL 経由で発生します。
それで、それらをすべてきれいにして、違法な単語があるかどうかを検出できたらどうなるだろうかと思いました。もしそうなら、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 を返し、section 以外を入力すると false を返します。なぜそれをしているのですか?
ご覧のとおり、私はすでにそれをデバッグしており、それが返されます:
62 array count:31
そう$count = 62 and array count = 31
なぜ62になるのですか?カウンター倍増のようです。私は何を間違えましたか?