2013-09-22 2 views
0

PHP에서 소켓을 통해 URL에 대한 POST를 방지하는 방법이 있습니까? 나는 http://en.wikipedia.org/wiki/CSRF에 대해 모두 알고 있었지만 모든 양식에 고유 한 해시가있는 숨겨진 입력을 넣고 싶지는 않습니다. 원격 호스트 나 다른 클라이언트의 스크립트 URL에 대해 전역 적으로 POST를 막고 싶습니다. HTTP_EXPECT 및 REQUEST_METHOD를 확인하여 cURL을 통한 POST를 방지하는 방법이 있지만 소켓 연결을 통해 클라이언트가 호출 한 스크립트에서 결정할 수있는 특별한 매개 변수가 없으면 실제로 POST 또는 소켓을 통한 POST. 소켓을 통해 http://www.google.com에 POST를 시도하면 HTTP/1.1 405 Method Not Allowed가 표시됩니다. 오류가 발생합니다. 필요한 모든 것은 PHP 스크립트에서와 동일합니다.PHP에서 socket을 통한 POST를 방지하는 방법은 무엇입니까?

감사합니다.

+0

당신은을 척 브라우저의 요청과 컬의 요청 사이의 차이를 말할 수 없다 브라우저. 너는 무엇을 막으려 고하는거야? – SLaks

+0

사실 cURL과 브라우저에 의한 호출에는 차이가 있지만 소켓을 지원하는 PHP 나 다른 언어에서 ** fsockopen **과 같은 소켓에 의해 열릴 때 차이점을 발견 할 수 없습니다. – sunrise

답변

1

질문이있는 경우 잘 모르겠습니다. 당신은 모든 POST 요청을 금지하는 mod_rewrite를 사용할 수 있습니다

RewriteEngine On 
RewriteCond %{REQUEST_METHOD} !^POST 
RewriteRule .* /yourerrordocuments/405.html [R=405,L] 

넣어이 당신의 .htaccess에. 그것은 모든 게시물 요청을 비활성화합니다. hek2mgl @

+0

답장을 보내 주셔서 감사합니다.하지만 POST를 완전히 막고 싶지는 않습니다. 내 웹 사이트의 모든 스크립트를 통해 POST를 처리하고 외부 스크립트의 POST 요청을 삭제하면됩니다. – sunrise

0

는 모든 스크립트에 대한 최선의 해결책이지만, 당 스크립트, 당신은 시도 할 수 :

<?php 
if(isset($_POST)) 
{ 
    die(); 
} 
else 
{ 
    echo 'continue'; 
} 
?> 
+1

이것은 작동하지 않습니다. 나는'GET' 요청에도'$ _POST'가 설정 될 것으로 기대합니다. '$ _SERVER [ 'REQUEST_METHOD']! == 'POST'를 테스트해야합니다. – hek2mgl

관련 문제