Например ваш сайт работает на PHP, а страница представляет из себя информацию об аккаунте пользователя. Самый частый URL в таких случаях - такой: sait.ru/?p=profile&user=Vasja
В таком URL нет ничего плохого, но самое уязвимое место может скрываться в самом коде страницы, например:
[red]<?php
echo "Информация о профиле: " . $_GET['user'];
?>[/red]
Как видно из примера, данные GET не фильтруются и выводятся сразу на страницу. Немного подумав для примера мы можем модифицировать URL до вот такого:
sait.ru/?p=profile&user=Vasja<b> - hello</b>
Выполнив такой код мы получим сообщение на странице рядом с именем участника.
Это не самое страшное, попробуем теперь так:
sait.ru/?p=profile&user=Vasja<script>alert(0); </script>
А это уже опасно, теперь хакер воспользуется вашей дырой и сможет сделать все что захочет.
Вторичный параметр $sql предназнчаен для защиты SQL-инъекций. Его нужно ставить в 1, когда вы фильтруете данные для SQL запроса, например:
SELECT... LIMIT 0, _filter($_GET['limit'],1)
Вот так вот просто вы сможете залатать XSS дыры своего сайта. Удачи!
Как же защитится от XSS атак? Ответ очень прост, нужно элементарно фильтровать данные - ВСЕ данные получаемые POST или GET.
Вот например функция на PHP, которая поможет Вам:
<?php
// Защита от XSS
function _filter( $var , $sql = 0) {
$var = strip_tags($var);
$var=str_replace ("n"," ", $var);
$var=str_replace ("r","", $var);
$var = htmlentities($var);
if ( $sql == 1) {
$var = mysql_real_escape_string($var);
}
return $var;
}
?>
Использование:
<?php echo _filter($_GET['value']); ?>