우선 SQL 인젝션, XSS 공격 등의 대부분은 GET 매개 변수를 사용하여 URL을 통해 발생합니다.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를 막을 수 있습니다. –