2011-08-22 4 views
-1

PHP 응용 프로그램에서 Ajax를 많이 사용하고 있으며 일반적으로 처리를 위해 POST 요청을 라우팅하기 위해 예상 변수 및 값을 확인하고 내가 스크립트를 처리한다는 것. 예를 들어

내가 삭제하거나 AJAX에게 POST 요청 등

//Initialize the class on top of the page that will be dealing with CRUD functions. 
$class = new CRUD(); 
//Delete Something 
if(isset($_POST['option']) && $_POST['option'] == 'delete-something') { 
    //Delete logic. 
} 
//Save Something 
if(isset($_POST['option']) && $_POST['option'] == 'save-something') { 
    //Save logic. 
} 

와 같은 것입니다 처리 할 내 일반적인 PHP 파일을 사용하여 뭔가를 삽입 할 경우. if(isset($_POST['option']) && $_POST['option'] == 'delete-something') 코드가 승인되지 않은 요청으로부터 보호 해줄지 궁금합니다. 또는 조건에 따라 $_SERVER['REQUEST_METHOD'] == 'POST'을 사용해야합니까? 이 둘 사이에는 어떤 차이가 있습니까? 왜냐하면 나는 많은 동료 개발자들이 $_SERVER['REQUEST_METHOD'] == 'POST'을 사용하는 것을 보았 기 때문이다.

+0

무단으로 무엇을 의미합니까? 이 코드는 인증/인증 검사를 수행하지 않습니다. – Fabio

+0

제 생각에 모든 사용자 입력을 위생 처리하고 POST를 이와 같이 사용하면 권한이없는 요청의 가능성을 최소화 할 수 있습니다. –

+0

슈퍼 글로벌 변수는 항상 "설정"되어 있으므로 현재 요청이 POST를 통해 실제로 수행되었는지 여부에 관계없이'isset ($ _ POST)'는 true입니다. –

답변

1

HTTP 요청에 POST 요청이 아닌 경우 $_POSTDocs은 실제 값으로 채워지지 않으므로 특정 값을 테스트하면 요청이 POST 요청인지 여부를 기술적으로 확인할 필요가 없습니다.

그러나, 때로는 $_SERVER['REQUEST_METHOD']Docs을 검사하여 수퍼 글로벌 배열의 구체적인 값에 대한 테스트를 수행하지 않는 것을 알고 싶을 수도 있습니다.

다음과 같이 상황에 따라 다릅니다.

+0

누군가 내 스크립트에 원격 POST 요청을 실제로 보낼 수 있습니까? 나는 Ajax 요청을 처리하기 위해 다른 파일을 사용할 것이기 때문에. 내가하는 일은 예상되는 변수를 확인하고 값을 처리하는 것입니다. 보안 위협에 노출되어 있습니까? –

+0

물론 표준 HTTP 요청 일뿐입니다. 브라우저가 어떻게 그럴 것이라고 생각하십니까? 그냥 표준 방법.(물론 보안에 대한 요구가 없기 때문에 보안은 매우 모호합니다. 보안 위험이 있는지 여부는 말할 것도 없습니다. HTTP 요청을 처리해야 할 필요가 있습니다. 괜찮아요.) – hakre

+0

아, 그럼 세션 변수로 스크립트를 확인해 보는 것이 더 낫습니까? –

0

음, 적어도, $_POST['option']이 존재하지 않는 경우의주의 사항을 방지 할 수 있습니다 ...

if (isset($_POST['option']) && $_POST['option'] == 'delete-something') 

... 이렇게. 따라서 $_SERVER['REQUEST_METHOD'] === 'POST'을 사용하는 경우에도 여전히 isset($_POST['option'])을 사용하려고합니다.

0

코드 if(isset($_POST['option']) && $_POST['option'] == 'delete-something')이 권한없는 요청으로부터 보호 해 줄지 궁금합니다.

분명히 없습니다.
나는 왜 그것이 어떤 보호를 줄 수 있으며 "허가되지 않은 요청"에 대한 의미가 무엇이라고 생각합니까?

조건에 따라 $_SERVER['REQUEST_METHOD'] == 'POST'을 사용해야합니까? 이 둘 사이에는 어떤 차이가 있습니까?

확실히. $_POST['option'] == 'delete-something'은 특정 필드를 확인하고있는 반면
$_SERVER['REQUEST_METHOD'] == 'POST'은 요청 방법을 확인하고 있습니다.
이전의 위치 대신 후자를 사용할 수 없습니다. 나는이 질문을 이해하지 못한다.