Я читал проект (не основанный на какой-либо фреймворке), и я встретил следующий (процедурный) код почти для каждого файла 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?
Использование этого безопасного использования требует белого списка имен функций. Однако префикс 'a_' составляет почти то же самое здесь. (По крайней мере, [нет основной функции php] (http://www.php.net/manual/en/indexes.functions.php) с таким именем.) – mario