PHP 개발에서는 위조 요청을 방지하기 위해서는 양식 제출의 출처를 확인하는 것이 필수적입니다. 다음 방법은 제출 요청이 예상 페이지에서 나오는 지 여부를 효과적으로 식별하고 웹 사이트의 보안을 향상시킬 수 있습니다.
HTTP 참조 헤더에는 사용자가 현재 페이지에 액세스하는 소스 URL이 포함되어 있습니다. 이 헤더를 감지하면 요청이 동일한 도메인 이름에서 나오는지 확인할 수 있습니다.
if (isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'yourdomain.com') !== false) {
// 동일한 도메인 이름에서 요청합니다
}
게시물 데이터에는 양식 제출에 대한 정보가 포함되어 있습니다. 특정 필드 (예 : 숨겨진 필드)의 값이 기대치를 충족하는지 확인하면 요청의 출처를 확인할 수 있습니다.
if (isset($_POST['nonce']) && $_POST['nonce'] === 'expected_nonce') {
// 예상 양식에서 요청합니다
}
CSRF 토큰은 각 세션에서 무작위로 생성 된 문자열입니다. 양식의 숨겨진 필드로 제출할 수 있으며 세션의 토큰과 비교할 수 있습니다.
// 세션에 보관하십시오 CSRF 토큰
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
// 양식에 숨겨진 필드를 포함하십시오
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
// 제출 된 점검토큰
if (isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
// 예상 양식에서 요청합니다
}
Salt는 커밋 된 데이터에 추가 된 임의의 문자열입니다. 데이터 위조를 방지하기 위해 해시했습니다.
// 소금을 생성하십시오
$salt = bin2hex(random_bytes(32));
// 데이터에 소금을 추가하십시오
$data = 'some_data' . $salt;
// 해시 데이터
$hash = hash('sha256', $data);
// 제출 된 점검 hash
if (isset($_POST['hash']) && $_POST['hash'] === $hash) {
// 예상 양식에서 요청합니다
}
위의 방법 중 하나 이상을 통해 개발자는 PHP의 양식 제출 소스를 효과적으로 확인하여 위조 요청을 방지하고 웹 응용 프로그램의 보안을 향상시킬 수 있습니다.