xss.phpНастройки PHP расширение фильтра по умолчанию
<?php
header('Content-Type:text/html; charset=UTF-8');
var_dump(ini_get('filter.default'));
if (isset($_GET['name'])) {
echo $_GET['name'];
exit();
}
просматривающие http://localhost/xss.php?name=%3Cscript%3Ealert('XSS')%3C/script%3E
выход:
строка (10) "unsafe_raw"
Я был под впечатлением, что это будет безопасно для уязвимостей XSS из-за фильтра расширение, но это не так! Он выводит диалоговое окно предупреждения javascript. Мои вопросы:
- Почему фильтр по умолчанию небезопасен. Я читал, что unsafe_raw не защищает от XSS?
- Как защитить PHP от этой уязвимости. Я мог бы изменить свой
php.ini
, но я бы хотел сделать это во время выполнения, ноini_set
,.htaccess
не работают по умолчанию в моем поле Ubuntu. Я хочу, чтобы это повлияло на время выполнения, так что все экземпляры php (при развертывании на других машинах) безопасны. Это возможно, или мне действительно нужно посыпать мой кодfilter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
, чтобы сделать его безопасным.
P.S: Этот код является безопасным, а также не смотря на то плохое, но если бы я мог установить его во время выполнения, было бы лучше.
<?php
header('Content-Type:text/html; charset=UTF-8');
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
if (isset($_GET['name'])) {
echo $_GET['name'];
exit();
}
Вы должны прочитать эту запись в блоге от Rasmus => http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html. Он говорит, что не покроет его код, но использует расширение pecl, filter_raw_string безопасно! Вам больше не нужен htmlspecialchars(). – Alfred
@Alfred: Я прочитал от него лучшее объяснение, не могу найти его прямо сейчас. Но он, конечно, не использует * просто * '_raw_string'. У него есть конфигурация, которая равна '$ _REQUEST = array_map_rec (" htmlspecialc ", ...)' – mario
Хорошо, спасибо! Было бы здорово, если бы вы нашли ссылку как-то :). – Alfred