PHP 프레임 워크를 기반으로하지 않은 프로젝트를 읽었으며 사용자 요청에 응답하는 거의 모든 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에서 함수 호출을위한 적절한 방법이나 제안 된 메커니즘이 있습니까?
안전하게 사용하려면 funciton 이름 화이트리스트가 필요합니다. 그러나 접두어 'a_'는 거의 같습니다. (적어도 [php core function] (http://www.php.net/manual/en/indexes.functions.php)과 같은 이름이 붙어 있습니다. – mario