XSS это межсайтовый скриптинг. Хакер формирует специальный URL, благодаря которому он сможет в дальнейшем залить эксплоит на ваш сервер или выполнить какой-нибудь вредоносный скрипт.
Например ваш сайт работает на PHP, а страница представляет из себя информацию об аккаунте пользователя. Самый частый URL в таких случаях - такой: sait.ru/?p=profile&user=Vasja

В таком URL нет ничего плохого, но самое уязвимое место может скрываться в самом коде страницы, например:

<?php
 
echo "Информация о профиле: " . $_GET['user']; 
 
?>

Как видно из примера, данные GET не фильтруются и выводятся сразу на страницу. Немного подумав для примера мы можем модифицировать URL до вот такого:

sait.ru/?p=profile&user=Vasja<b> - hello</b>

Выполнив такой код мы получим сообщение на странице рядом с именем участника.

Это не самое страшное, попробуем теперь так:

sait.ru/?p=profile&user=Vasja<script>alert(0); </script>

А это уже опасно, теперь хакер воспользуется вашей дырой и сможет сделать все что захочет.

Как же защитится от XSS атак? Ответ очень прост, нужно элементарно фильтровать данные - ВСЕ данные получаемые POST или GET.

Вот например функция на PHP, которая поможет Вам:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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']); ?>

Вторичный параметр $sql предназнчаен для защиты SQL-инъекций. Его нужно ставить в 1, когда вы фильтруете данные для SQL запроса, например:
SELECT... LIMIT 0, _filter($_GET['limit'],1)

Вот так вот просто вы сможете залатать XSS дыры своего сайта. Удачи! :)

(Visited 504 times, 1 visits today)