>  기사  >  백엔드 개발  >  CSRF 공격을 방지하기 위해 PHP 양식을 사용하는 방법

CSRF 공격을 방지하기 위해 PHP 양식을 사용하는 방법

王林
王林원래의
2023-06-24 11:53:411285검색

네트워크 기술이 지속적으로 발전함에 따라 보안 문제는 네트워크 애플리케이션 개발에서 무시할 수 없는 문제가 점점 더 커지고 있습니다. 그 중 CSRF(Cross-Site Request Forgery) 공격은 일반적인 공격 방법으로, 사용자가 브라우저에서 악의적인 요청을 시작할 수 있도록 하여 백그라운드로 불법적인 요청을 시작하도록 하는 것이 주요 목적입니다. 이로 인해 서버측 보안 취약점이 발생합니다. PHP 애플리케이션에서 양식 유효성 검사를 사용하는 것은 CSRF 공격을 방지하는 효과적인 수단입니다.

  1. CSRF 토큰 확인 추가

CSRF 공격은 주로 로그인한 사용자의 신원을 사용하여 원격 공격을 수행합니다. 이 공격 방법으로부터 보호하는 가장 직접적인 방법은 페이지 데이터에 몇 가지 색다른 값을 추가하는 것입니다. 및 양식. 각 양식 요청이 한 번만 전송되도록 제한합니다. 이 값은 양식을 제출할 때 신원 정보가 합법적인지 확인하는 데 사용되는 CSRF 토큰입니다. 백그라운드에서 양식 제출을 처리할 때 토큰을 확인해야 합니다. 미리 설정된 토큰과 일치하는 경우에만 요청을 계속 처리할 수 있습니다.

샘플 코드는 다음과 같습니다.

// 生成Token值,通常可以在session中设置

session_start();

$token = md5(uniqid(mt_rand(), true));

$_SESSION['csrf_token'] = $token;

// 应用到表单中

<input type="hidden" name="csrf_token" value="<?=$_SESSION['csrf_token']?>"/>

양식 제출의 경우 데이터를 처리하기 전에 다음과 같이 토큰 확인이 필요합니다.

// 获取表单提交的Token

$submittedToken = $_POST['csrf_token'];

// 验证Token是否合法

if (!isset($_SESSION['csrf_token']) || $submittedToken !== $_SESSION['csrf_token']) {

    die('Token validation failed, request denied');

}

위 코드에서는 PHP의 세션 메커니즘을 사용하여 무작위의 중복되지 않는 토큰을 생성합니다. 값이며 세션에 저장됩니다. 양식에서 양식이 제출될 때 서버로 전송될 수 있도록 토큰 값을 숨겨진 필드의 필드로 백그라운드에 전달해야 합니다. 서버 측에서는 요청된 토큰 값을 확인해야 합니다. 제출된 토큰이 사전 정의된 토큰과 일치하지 않으면 요청을 거부해야 합니다.

  1. 리퍼러 정책 헤더 구성

리퍼러 정책은 타사 사이트에 요청을 보낼 때 브라우저에 리퍼러 필드를 포함할지 여부를 제어하는 ​​데 사용되는 HTTP 헤더입니다. 양식 처리 중에 불법적인 Referrer 필드에 대한 요청을 직접 거부하면 CSRF 공격을 효과적으로 방어할 수 있습니다.

PHP에서는 다음 코드를 사용하여 리퍼러 정책 헤더를 설정할 수 있습니다.

header('Referrer-Policy: no-referrer');

위 코드는 요청을 보낼 때 리퍼러 헤더 정보를 포함하지 않도록 브라우저에 지시합니다. 이렇게 하면 공격자가 Referrer 헤더를 위조하여 CSRF 공격을 시도하더라도 브라우저에서 거부되어 서버로 요청이 전송되지 않습니다.

  1. 양식에 "인증 코드" 또는 "비밀번호" 인증 추가

양식에 CSRF 토큰을 추가하는 것 외에도 인증 코드나 비밀번호와 같은 추가 인증 방법을 추가하여 양식의 보안을 강화할 수도 있습니다. CSRF 공격을 방지합니다. 이 방법은 상대적으로 번거롭기는 하지만, 공격자가 아무리 서버를 속이려고 해도 추가적인 인증링크를 거쳐야 하므로 공격이 더욱 어려워지기 때문에 매우 효과적이다.

  1. 양식 제출 시 GET 메서드 사용 피하기

CSRF 공격은 대부분 GET 요청을 통해 시작되므로 양식에 데이터를 제출하기 위해 GET 메서드 사용을 피하려고 합니다. GET 방법을 사용해야 하는 경우 양식의 보안을 강화하기 위해 토큰 값이나 기타 인증 방법을 양식에 추가해야 합니다.

요컨대 CSRF 공격을 예방하는 것은 PHP 애플리케이션 개발에 있어서 반드시 주의해야 할 문제입니다. 토큰 값, 리퍼러 정책 헤더, 인증 코드 등 다양한 보안 메커니즘을 합리적으로 사용함으로써 CSRF 공격의 위협으로부터 애플리케이션을 효과적으로 보호할 수 있습니다. 동시에 우리는 최신 네트워크 보안 문제와 공격 방법에 계속 주의를 기울여야 하며 보안 예방 조치를 신속하게 업데이트하고 개선해야 합니다.

위 내용은 CSRF 공격을 방지하기 위해 PHP 양식을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.