Любой вход от клиента - это способы быть уязвимыми. Включая все формы и строку запроса. Это включает в себя все HTTP-глаголы.
Существуют сторонние решения, которые могут сканировать приложение и обнаруживать, когда может произойти инъекция.
$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";