@nomer1

Данный код уязвим?

Данный код уязвим? Может ли злоумышленник что-нибудь натворить?
$path = parse_url($_SERVER['REQUEST_URI']);
		$url = explode('/', $path['path']);
		if(isset($url[1]) && !empty($url[1])){
			if(!array_key_exists($url[1], array('404'=>true,'index'=>true))){
				$ctrl = 'controllers/_'.$url[1].'Ctrl.php';  //уязвима ли эта строка?
				if(file_exists($ctrl)){
					include $ctrl;
				}else include 'controllers/_404Ctrl.php';
			}else include 'controllers/_404Ctrl.php';
		}else include 'controllers/_indexCtrl.php';
  • Вопрос задан
  • 191 просмотр
Пригласить эксперта
Ответы на вопрос 3
Нет, но код так себе

!array_key_exists($url[1], array('404'=>true,'index'=>true))

мм? если присутствует вернет true, следовательно если передать 404 то условие не выполнится
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Если я все верно понял, в ларавел да и вообще, это называется Роутинг.

Эта, тут кароче такое дело... Роутер для нормального мвц(и для ооп в целом) выполняет 1 задачу(как и положено по принципу единой ответственности), он определяет что пришло в урл и какой контроллер и экшн подходит под данный урл. Все. Для подключения всяких файлов и создания конторллеров есть диспетчер, которому передается объект роутера. Типа так: диспетчер пропарсил строку http://nomer1.com/user/vasilii_pupkin, в свои свойства вписал: протокол = хттп, сайтнейм = nomer1.com, параметры: user, vasilii_pupkin. Таким параметрам по правилам роутера(смотрите "создание правил в роутере", читайте регулярные выражения) соответствует контроллер userController и экшн showAction с параметром допускающим значение содержащее буквы латиницы+символ подчеркивания. Все, эту инфу можно из него получить, передаем диспетчеру и там уже мутим магию - контроллер, экшн, все дела. А это жесть и адский Ад.
Ответ написан
Комментировать
@shagguboy
if(isset($url[1]) && !empty($url[1])){
if(!array_key_exists($url[1],

два из трех лишние
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы