2013-04-11 3 views
2

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에서 함수 호출을위한 적절한 방법이나 제안 된 메커니즘이 있습니까?

+2

안전하게 사용하려면 funciton 이름 화이트리스트가 필요합니다. 그러나 접두어 'a_'는 거의 같습니다. (적어도 [php core function] (http://www.php.net/manual/en/indexes.functions.php)과 같은 이름이 붙어 있습니다. – mario

답변

-1

절차 용 PHP에서 함수 호출을위한 적절한 방법이나 제안 된 메커니즘이 있습니까?

적절한 방법은 경로에 따라 실행할 코드를 결정할 라우터 스크립트를 사용하는 것입니다 (예 : Silex).

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

하고 의견의 문제 일 수 있습니다

FallbackResource /index.php 

웹 루트에 적절한 htaccess로 파일을 가지고 있지만, 앱의 innerworkings을 노출 할 필요가 0 실제 사용 사례가있다 모든 기능 앞에 접두어를 붙이더라도 클라이언트에게 직접 전달할 수 있습니다.

+0

이런 종류의 것을 볼 때, 미안하다. 그리고 그것은 ruby ​​/ rails/sinatra python/django/flask 웹 개발자와 php 웹 개발자의 무리입니다. 루비스트와 파이썬리스트는 가장 쉬운 방법이기 때문에 좋은 관행으로 *** 강제됩니다. PHP의 본질은 언제나 가장 나쁜 방법입니다. 그리고 나는 PHP 개발자가해서는 안되는 모든 것을 홍보하는 10 가지 y.o 자습서에 대해서도 말하지 않고 있습니다 ... – mpm

+0

downvote 나에게 내 위치에 서기를 원하는 모두. 이것은 교육의 문제입니다. – mpm