2013-04-11 1 views
2

Я читал проект (не основанный на какой-либо фреймворке), и я встретил следующий (процедурный) код почти для каждого файла PHP, который отвечает на запросы пользователя (либо $_GET, либо $_POST).

if ($_REQUEST['a']){ 
    $func="a_".$_REQUEST['a']; 
    if (function_exists($func)){ 
     $func(); 
    }else{ 
     // redirect 
    } 
}else{ 
    // redirect 
} 
... 
a_action_a() { ... } 
a_action_b() { ... } 

Я интересно знать, если это достаточно безопасно (или даже лучше, каковы угрозы) в качестве механизма для вызова функции. Может ли этот код привести к переходу потока управления или функции?

Есть ли подходящий способ или предлагаемые механизмы для вызова функции в процедурный PHP?

+2

Использование этого безопасного использования требует белого списка имен функций. Однако префикс 'a_' составляет почти то же самое здесь. (По крайней мере, [нет основной функции php] (http://www.php.net/manual/en/indexes.functions.php) с таким именем.) – mario

ответ

-1

Есть ли подходящий способ или предлагаемые механизмы для вызова функции в процедурный PHP?

Правильный способ заключается в использовании сценария маршрутизатора, который в зависимости от маршрута определяет, какой код выполнять, например, в Silex.

$app->get("/index",function(){ 
    return "this is the index"; 
}); 

и иметь соответствующий файл .htaccess в корневой директории

FallbackResource /index.php 

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

+0

Когда я вижу такие вещи, это заставляет меня хотеть кричать жаль. И в этом разница между ruby ​​/ rails/sinatra python/django/flask web dev и стайкой веб-разработчиков php: рубисты и питонисты *** принудительно превращаются в хорошие практики, потому что это самый простой способ. Природа PHP делает вредные методы всегда самым простым способом. И я даже не говорю обо всех этих 10 y.o учебных пособиях, которые продвигают все, что разработчик php не должен делать ... – mpm

+0

downvote me все, что вы хотите, я поддерживаю свою позицию. это вопрос образования. – mpm

 Смежные вопросы

  • Нет связанных вопросов^_^