Я написал небольшой фрагмент кода, который должен создавать экземпляр класса php на основе get-параметра.
(Код отредактирован на основе предложений @ sietse85 и @CBroe:)
$this->pageVal = preg_replace('/[^A-Za-z]/', '', filter_input(INPUT_GET, 'page')) ? preg_replace('/[^A-Za-z]/', '', filter_input(INPUT_GET, 'page')) : "index";
$file = $this->moduleDir . $this->pageVal . ".php";
if (file_exists($file)) {
require_once $file;
$class = new $this->pageVal($this);
} else {
header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found", true, 404);
$this->loadPage("404");
}
В этом похожем вопросе предлагается сделать что-то вроде этого:
Вызов функции PHP из URL?
В других вопросах люди иногда получают предупреждение, когда используют небезопасный код - теперь я пытался удалить некоторые проблемы безопасности (в моем коде) на основе этих предупреждений, используя filter_input и Requiere только файлы, которые существуют. Возможно, этого недостаточно или неправильная процедура?
Должен ли я добавить в белый список существующие страницы и возможные параметры или сделать что-то еще, чтобы избежать проблем безопасности, или это не нужно?
Как это:
$existingPages = ["index", "profile", "login", "register"];
if(in_array(filter_input(INPUT_GET, 'page'), $existingPages)) {
//GO ON WITH PROCESSING
$this->pageVal = filter_input(...)
}
Если фон моего вопроса не ясен с вашей точки зрения опишите проблему, чтобы помочь мне ее определить.
Спасибо!