2014-04-14 3 views
1

저는 PHP를 배우고 있는데, 구체적으로 어떻게하면 PHP 폼을 보호 할 수 있습니까? 내가 읽은양식을 제출했는지 확인하는 가장 좋은 방법은 (PHP)

if (isset($_POST['Submit'])) { 
    // do something... 
} 

작업을 수행하지만, 최선의 입력을 사용하는 것을 :

나는 "Sanitize and Validate Data with PHP Filters"상기 양식에 다음 코드를 사용하여 제출 한 경우 저자 검사는 제목의 기사를 읽고 있어요 필터 (예 : filter_input).

둘째, 또한 그래서

"직접 자동 전역 $의 _POST 배열에 접근"하지에 대해 잔소리에서 넷빈즈을 중지 할 filter_input를 사용하여 나는 다음을 썼다 :

과 같이 사용할 수
function is_form_submit() { 
    $request = filter_input(INPUT_SERVER, "REQUEST_METHOD"); 
    return $request === 'POST' ? true : false; 
} 

:

if (is_form_submit()) { 
    // do something... 
} 

내 질문은 : 내 코드가 동일한 것을 달성하지 못합니까? 그렇지 않다면 왜 안 되죠? 제발 조언.

+1

'의는 isset 아래 코딩의 유형에 의해 영향을받지 않습니다 '에만 이름 '으로 입력 요소가있는 경우 "제출"작동

filter_input(INPUT_POST, 'requiredID') 
'$ _SERVER [ 'REQUEST_METHOD'] === 'POST'는보다 일반적인 해결책입니다. 폼 제출을 검사하기 위해서, 내용 타입이'application/x-www-form-urlencoded' 또는'multipart/form-data'인지 확인할 수 있습니다 –

+3

도 ...'return $ request === 'POST' ? true : false;'==='return $ request === 'POST'; – dave

+0

'if (! empty ($ _ POST))'를 간단히 검사 할 수 있습니다. 일반적으로 제출 된 값을 확인하는 데 사용했습니다. –

답변

1

대부분의 경우 코드가 동일한 결과를 얻지 만 isset 호출과 동일하지 않습니다.

코드가 수행하는 내용은 REQUEST_METHODPOST인지 확인하는 것입니다. 즉, 사용자가 현재 페이지에 액세스하기위한 POST 요청을했는지 확인합니다.

issetSubmit이라는 이름의 내용이 POST을 통해 전송되었는지 확인합니다. 이는 대개 제출 버튼이 <input name="Submit" type="submit" value="Submit" /> 일 때 발생합니다 (클릭하거나 텍스트 입력란에 입력하면 첫 번째 제출 버튼이 됨) $_POST['Submit']이 설정됩니다.

다른 동작을 보려면 curl -X POST your-url.com/page.php의 결과를 curl -F Submit=submit your-url.com/page.php과 비교하십시오.

+0

두 명령을 모두 폼의 페이지에서 실행 시켰습니다. 둘 다 페이지를로드했습니다. 나는 무엇을보고 있어야 하는가? – sleeper

+0

이것이 나를 가장 명확한 대답으로 표시했습니다. 그러나, 나는 아직도 당신이 게시 한 컬 명령을 실행하여 "가정"한 것을 얻지 못한다. – sleeper

+0

'isset' 검사 만 사용하면 첫 번째 명령은 작동하지 않지만 두 번째 명령은 작동하지 않습니다. 'filter_input' 체크를 사용하면 둘 다 작동합니다. –

1

filter_input은 변경되지 않은 사용자 입력입니다.

일부 스크립트는 $ _POST 및 $ _GET을 직접 추가/수정합니다. 코드가 안전하다고 판단되면 조작 된 키/값이 잘못되어 오류가 발생할 수 있습니다.

가 ($ _ POST는 [ '제출'])

$_POST['requiredID'] = brokenFunction($_POST['requiredID']); 
관련 문제