최신 웹 애플리케이션에서는 CSRF(교차 사이트 요청 위조) 공격이 일반적인 공격 방법이 되었습니다. Laravel은 CSRF 보호 메커니즘이 내장된 인기 있는 PHP 프레임워크로 CSRF 추가를 사용하는 것이 매우 편리할 수 있습니다. 애플리케이션을 보호합니다.
이 글에서는 Laravel에서 CSRF 보호를 위해 미들웨어를 사용하는 방법을 소개하고 구체적인 코드 예제를 제공합니다.
Cross-Site Request Forgery 공격은 영어로 Cross-Site Request Forgery, 줄여서 CSRF라고도 알려져 있으며 사용자 ID를 위조하여 악의적인 요청을 시작하는 공격 방법입니다.
공격자는 일반적으로 사용자가 악성 링크가 있는 페이지를 클릭하도록 속이거나 피해자가 로그인한 웹 사이트에 악성 스크립트를 삽입하여 CSRF 공격을 구현합니다. 피해자가 로그인하면 공격자는 일련의 악의적인 요청(예: 비밀번호 변경, 메시지 게시 등)을 시작합니다. 이러한 요청은 피해자에게 합법적인 것처럼 보이지만 실제로는 이러한 요청이 공격자에 의해 시작됩니다. 피해자에게 특정 해를 끼칠 것입니다.
Laravel은 CSRF 공격으로부터 애플리케이션을 보호할 수 있는 매우 편리한 메커니즘을 제공합니다. Laravel 프레임워크에는 미들웨어를 통해 구현할 수 있는 CSRF 보호 메커니즘이 내장되어 있습니다.
Laravel에서는 CSRF 미들웨어를 사용하여 POST, PUT, DELETE 요청 시 CSRF 토큰이 유효한지 확인합니다. 기본적으로 Laravel은 애플리케이션에 VerifyCsrfToken
미들웨어를 추가하고 이러한 요청에 대한 CSRF 토큰이 유효한지 자동으로 확인합니다. VerifyCsrfToken
中间件,并自动检查这些请求的CSRF令牌是否有效。
如果CSRF令牌无效,Laravel将抛出一个TokenMismatchException
异常,并提供一个默认的错误视图。我们也可以根据自己的需求自定义错误处理方式。
Laravel会在每个用户会话中为应用生成一个CSRF令牌,我们可以在应用config/csrf.php
的配置文件中调整CSRF令牌的配置。该配置文件允许您配置CSRF COOKIE和CSRF令牌在请求中的名称。
<?php return [ /* |-------------------------------------------------------------------------- | CSRF Cookie Name |-------------------------------------------------------------------------- | | The name of the cookie used to store the CSRF token. | */ 'cookie' => 'XSRF-TOKEN', /* |-------------------------------------------------------------------------- | CSRF Header Name |-------------------------------------------------------------------------- | | The name of the CSRF header used to store the CSRF token. | */ 'header' => 'X-XSRF-TOKEN', /* |-------------------------------------------------------------------------- | CSRF Token Expiration |-------------------------------------------------------------------------- | | The number of minutes that the CSRF token should be considered valid. | */ 'expire' => 60, ];
Laravel中的VerifyCsrfToken
中间件将检查在路由中定义的任何POST、PUT或DELETE请求上的CSRF令牌是否有效。默认情况下,应用的routes/web.php
文件除了web
中间件外,还会使用VerifyCsrfToken
中间件。
可以在中间件组中添加CSRF中间件,以便在应用中的其他路由中使用。为了使用中间件保护路由,我们可以使用middleware
方法将其添加到路由定义中,如下所示:
Route::middleware(['web', 'csrf'])->group(function () { // });
默认情况下,如果使用VerifyCsrfToken
中间件检测到CSRF令牌不正确,Laravel将抛出一个TokenMismatchException
异常,并提供一个默认的错误视图。
我们可以在app/Exceptions/Handler.php
文件中尝试捕获CSRF异常并指定我们自己的错误处理方式。下面是一个自定义CSRF异常处理程序的示例:
<?php namespace AppExceptions; use Exception; use IlluminateFoundationExceptionsHandler as ExceptionHandler; use IlluminateSessionTokenMismatchException; class Handler extends ExceptionHandler { /** * A list of the exception types that should be reported. * * @var array */ protected $dontReport = [ TokenMismatchException::class, ]; /** * Report or log an exception. * * @param Exception $exception * @return void * * @throws Exception */ public function report(Exception $exception) { parent::report($exception); } /** * Render an exception into an HTTP response. * * @param IlluminateHttpRequest $request * @param Exception $exception * @return IlluminateHttpResponse * * @throws Exception */ public function render($request, Exception $exception) { if ($exception instanceof TokenMismatchException) { // 处理CSRF异常 return redirect() ->back() ->withInput($request->input()) ->with('error', 'CSRF Token Mismatch'); } return parent::render($request, $exception); } }
在上面的代码中,我们捕获了TokenMismatchException
异常,并使用with
方法将错误消息保存到error
闪存数据中。稍后,我们可以在视图中使用with
方法访问这个闪存数据。
最后,我们可以在视图中为任何需要提交POST、PUT或DELETE请求的表单添加CSRF令牌字段。使用csrf_field
方法即可在表单中生成CSRF令牌字段,如下所示:
<form method="POST" action="/example"> {{ csrf_field() }} <!-- Your form fields go here... --> <button type="submit">Submit</button> </form>
在本文中,我们介绍了如何在Laravel中使用中间件保护应用免受CSRF攻击。我们通过配置CSRF令牌、使用默认的VerifyCsrfToken
TokenMismatchException
예외를 발생시키고 기본 오류 보기를 제공합니다. 또한 필요에 따라 오류 처리를 사용자 정의할 수도 있습니다. 🎜config/csrf.php
구성의 구성 파일에서 조정할 수 있습니다. CSRF 토큰. 이 구성 파일을 사용하면 요청에서 CSRF COOKIE와 CSRF 토큰 이름을 구성할 수 있습니다. 🎜rrreee VerifyCsrfToken
미들웨어는 경로에 정의된 모든 POST, PUT 또는 DELETE 요청에서 CSRF 토큰이 유효한지 여부를 확인합니다. 기본적으로 애플리케이션의 routes/web.php
파일은 web
미들웨어 외에 VerifyCsrfToken
미들웨어도 사용합니다. 🎜🎜 CSRF 미들웨어는 미들웨어 그룹에 추가되어 애플리케이션의 다른 경로에서 사용할 수 있습니다. 미들웨어로 경로를 보호하려면 다음과 같이 middleware
메서드를 사용하여 경로 정의에 이를 추가할 수 있습니다. 🎜rrreee VerifyCsrfToken
미들웨어를 사용하여 감지되면 Laravel은 TokenMismatchException
예외를 발생시키고 기본 오류 보기를 제공합니다. 🎜🎜우리는 app/Exceptions/Handler.php
파일에서 CSRF 예외를 포착하고 자체 오류 처리를 지정할 수 있습니다. 다음은 사용자 정의 CSRF 예외 처리기의 예입니다. 🎜rrreee🎜 위 코드에서 TokenMismatchException
예외를 포착하고 with
메서드를 사용하여 오류 메시지를 오류가 있습니다. 나중에 with
메소드를 사용하여 뷰에서 이 플래시 데이터에 액세스할 수 있습니다. 🎜🎜마지막으로 POST, PUT 또는 DELETE 요청을 제출해야 하는 모든 양식의 뷰에 CSRF 토큰 필드를 추가할 수 있습니다. 아래와 같이 csrf_field
메소드를 사용하여 양식에 CSRF 토큰 필드를 생성할 수 있습니다: 🎜rrreee🎜 요약 🎜🎜 이 기사에서는 Laravel 공격에서 미들웨어를 사용하여 CSRF로부터 애플리케이션을 보호하는 방법을 다루었습니다. CSRF 토큰을 구성하고, 기본 VerifyCsrfToken
미들웨어를 사용하고, CSRF 오류 처리 방법을 사용자 정의하여 애플리케이션 보안을 효과적으로 개선했습니다. 저는 이러한 기술이 보다 안전한 웹 애플리케이션을 구축하는 데 도움이 될 수 있다고 믿습니다. 🎜위 내용은 Laravel에서 CSRF(교차 사이트 요청 위조) 보호를 위해 미들웨어를 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!