Я написал небольшой фрагмент кода, который должен создать экземпляр класса 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(...)
}
Если предыстория моего вопроса неясна с вашей точки зрения, опишите проблему, чтобы я мог ее уточнить.
Спасибо!
$this->pageVal = preg_replace('/[^A-Za-z]/', '', $this->pageVal);
- person sietse85   schedule 26.04.2018$this->pageVal = preg_replace('/[^A-Za-z]/', '', filter_input(INPUT_GET, 'page')) ? preg_replace('/[^A-Za-z]/', '', filter_input(INPUT_GET, 'page')) : "index";
Извините, это ужасно читать здесь - может быть, вставьте это в текстовый файл, чтобы прочитать? Я совместил это с тройной операцией. - person   schedule 26.04.2018