Laravel-CSRF 보호

CSRF는 웹 애플리케이션에 대한 Cross Site Forgery 공격을 나타냅니다. CSRF 공격은 시스템의 인증 된 사용자가 수행하는 무단 활동입니다. 따라서 많은 웹 애플리케이션이 이러한 공격에 취약합니다.

라 라벨은 다음과 같은 방식으로 CSRF 보호를 제공합니다.

라 라벨에는 각 활성 사용자 세션에 대한 토큰을 생성하는 내장 CSRF 플러그인이 포함되어 있습니다. 이러한 토큰은 관련 인증 된 사용자가 작업 또는 요청을 전송했는지 확인합니다.

이행

Laravel의 CSRF 보호 구현은이 섹션에서 자세히 설명합니다. CSRF 보호를 더 진행하기 전에 다음 사항이 주목됩니다.

  • CSRF는 웹 애플리케이션 내에서 선언 된 HTML 양식 내에서 구현됩니다. Laravel의 CSRF 보호 미들웨어가 요청을 검증 할 수 있도록 숨겨진 검증 된 CSRF 토큰을 양식에 포함해야합니다. 구문은 다음과 같습니다.

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • 모든 발신 요청에 대한 CSRF 토큰이 포함되어 있으므로 JavaScript HTTP 라이브러리를 사용하여 JavaScript 기반 애플리케이션을 편리하게 빌드 할 수 있습니다.

  • 즉 파일 resources/assets/js/bootstrap.js 라 라벨 애플리케이션의 모든 토큰을 등록하고 다음을 포함합니다. meta 저장하는 태그 csrf-tokenAxios HTTP library.

CSRF 토큰이없는 양식

다음 코드 줄을 고려하십시오. 두 개의 매개 변수를 입력으로 사용하는 양식을 표시합니다.emailmessage.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

위 코드의 결과는 최종 사용자가 볼 수있는 아래에 표시된 형식입니다.

위에 표시된 양식은 승인 된 사용자의 모든 입력 정보를 수락합니다. 이로 인해 웹 응용 프로그램이 다양한 공격에 취약해질 수 있습니다.

제출 버튼에는 컨트롤러 섹션의 기능이 포함되어 있습니다. 그만큼postContact기능은 관련 뷰에 대한 컨트롤러에서 사용됩니다. 아래에 나와 있습니다-

public function postContact(Request $request) {
   return $request-> all();
}

양식에 CSRF 토큰이 포함되어 있지 않으므로 입력 매개 변수로 공유되는 민감한 정보가 다양한 공격을 받기 쉽습니다.

CSRF 토큰으로 양식

다음 코드 줄은 CSRF 토큰을 사용하여 재 설계된 양식을 보여줍니다.

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

달성 된 출력은 아래와 같이 토큰과 함께 JSON을 반환합니다.

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

제출 버튼을 클릭하여 생성 된 CSRF 토큰입니다.