Это не совсем уязвимости, скорее - неграмотное использование функции веб-разработчиками. Итак, функция parse_str(string str [, array arr]) разбирает строку str, которая должна иметь формат строки запроса URL, и присваивает значения переменным в текущем контексте, если не передан второй аргумент arr. В последнем случае значения будут сохранены в этой переменной в качестве элементов массива.
Представь, что у тебя есть скрипт script.php, в котором вписан следующий код:
<?php
$var = 'init';
parse_str($_SERVER['QUERY_STRING']);
print $var;
?>Если ты обратишься к скрипту следующим образом: script.php?var=new, то переменная $var перезапишется новым значением «new»! Налицо уязвимость класса «arbitrary variable overwrite».
То же самое будет справедливо и для следующего кода:
<?php
//script.php?array[]=new
$array = array('init');
parse_str($_SERVER['QUERY_STRING']);
print_r($array); //теперь [0] => init, [1] => new// script.php?array=new
$array = array('init');
parse_str($_SERVER['QUERY_STRING'],$array); //теперь [array] => new
print_r($array);
?>
Комментариев нет:
Отправить комментарий