Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

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

Ответ 3

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

$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";