소개
웹 사이트에 적절한 보안 강화를 추가하려면 주소 지정이 필요합니다. CSRF(교차 사이트 요청 위조)를 포함한 잠재적인 취약점. 이 기사에서는 PHP를 사용하여 CSRF 토큰을 효과적으로 추가하는 방법을 자세히 설명합니다.
문제 이해
웹 사이트에 CSRF 토큰 보호를 구현했지만 토큰 값이 일관되지 않습니다. HTML 양식에 존재합니다. 특히 "연락처" 및 AJAX 양식에서 이 문제가 나타납니다.
코드 검토
토큰:
PHP:
if (!isset($_SESSION)) { session_start(); $_SESSION['formStarted'] = true; } if (!isset($_SESSION['token'])) { $token = md5(uniqid(rand(), TRUE)); $_SESSION['token'] = $token; }
HTML:
<input type="hidden" name="token" value="<?php echo $token; ?>" />
약점 해결
안타깝게도 현재 토큰 생성 방법은 결함이 있는 기술을 사용합니다.
강력한 토큰 생성기 구현
양식을 보호하려면 다음 PHP 코드를 사용하세요.
PHP 7:
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
PHP 5.3(또는 ext-mcrypt 사용):
session_start(); if (empty($_SESSION['token'])) { if (function_exists('mcrypt_create_iv')) { $_SESSION['token'] = bin2hex(mcrypt_create_iv(32, MCRYPT_DEV_URANDOM)); } else { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32)); } } $token = $_SESSION['token'];
토큰 확인
다음으로 CSRF 토큰의 유효성을 올바르게 검증하여 시도를 방지합니다. 악용:
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to process the form data } else { // Log this as a warning and monitor such attempts } }
추가 고려 사항
위 내용은 PHP 양식에서 CSRF 토큰 보호를 안전하게 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!