Intereting Posts

Sanitize параметры $ _GET, чтобы избежать XSS и других атак

У меня есть сайт в php, который включает () для встраивания содержимого в шаблон. Загружаемая страница указана в параметре get, я добавляю «.php» в конец параметра и включаю эту страницу. Мне нужно сделать некоторые проверки безопасности, чтобы избежать XSS или других вещей (а не mysql инъекции, так как у нас нет базы данных). Я придумал следующее.

$page = $_GET['page']; if(!strpos(strtolower($page), 'http') || !strpos($page, '/') || !strpos($page, '\\') || !strpos($page, '..')) { //append ".php" to $page and include the page 

Есть ли еще одна вещь, которую я могу сделать для дальнейшей дезинфекции моего вклада?

Solutions Collecting From Web of "Sanitize параметры $ _GET, чтобы избежать XSS и других атак"

 $page = preg_replace('/[^-a-zA-Z0-9_]/', '', $_GET['page']); 

Вероятно, это самый быстрый способ его дезинфекции, это займет все и убедитесь, что оно содержит только буквы, цифры, символы подчеркивания или тире.

Не «санировать» – атаки зависят от использования данных, а не от источника. Выигрывайте значения при их выводе. См. Также мой ответ на вопрос: Каков наилучший метод для дезинфекции ввода пользователя с помощью PHP?

Определите явный список страниц, которые у вас есть в исходном коде, а затем используйте его для проверки ввода. Да, это больше работы, но она дает понять, что разрешено, а что нет. Например:

 $AVAILABLE_PAGES = array('home', 'news', ...); $AVAILABLE_PAGES = array_fill_keys($AVAILABLE_PAGES, 1); $page = $_GET['page']; if (!$AVAILABLE_PAGES[$page]) { header("HTTP/1.0 404 Not Found"); die('Page not found.'); } include "pages/$page.php";