강력한 토큰 생성을 위해 무작위 바이트 사용
CSRF 토큰 생성의 맥락에서 rand() 및 uniqid()를 사용하면 보안 위험이 발생합니다. 예측 가능성과 제한된 엔트로피. 대신 다음을 선택하세요.
session_start(); if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32)); } $token = $_SESSION['token'];
CSRF 토큰을 안전하게 확인
직접 동일성 검사(== 또는 ===)를 사용하지 마세요. 대신, PHP 5.6의 경우 hash_equals()를 사용하고 이전 버전의 경우 paragonie/hash-compat를 사용하세요.
if (!empty($_POST['token'])) { if (hash_equals($_SESSION['token'], $_POST['token'])) { // Proceed to form data processing } else { // Log and monitor these attempts } }
양식별 토큰으로 보안 강화
토큰을 제한하려면 특정 양식에 사용 hash_hmac():
echo hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']);
$calc = hash_hmac('sha256', '/my_form.php', $_SESSION['second_token']); if (hash_equals($calc, $_POST['token'])) { // Continue... }
단순성을 위한 하이브리드 접근 방식
Twig 템플릿을 사용하면 사용자 정의 Twig 기능을 사용하여 토큰 생성을 단순화할 수 있습니다.
$twigEnv->addFunction( new \Twig_SimpleFunction( 'form_token', function($lock_to = null) { // ... } ) );
<input type="hidden" name="token" value="{{ form_token() }}" />
또는 잠긴 경우 토큰:
<input type="hidden" name="token" value="{{ form_token('/my_form.php') }}" />
일회용 CSRF 토큰
필요한 경우 Anti-CSRF와 같은 특수 라이브러리를 사용하여 일회용 CSRF 토큰을 관리하는 것이 좋습니다. Paragon Initiative Enterprises의 도서관.
위 내용은 PHP에서 CSRF 토큰을 안전하게 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!