해결책: 1. Laravel을 사용하여 각 사용자 세션에 대해 "CSRF 토큰"을 자동으로 생성합니다. 이 토큰은 로그인한 사용자와 요청자가 동일한 사람인지 확인하는 데 사용할 수 있습니다. 토큰 값을 얻으려면 전역 도움말 기능인 "csrf_token"을 사용하세요. 구문은 "<...value php="" echo="">"입니다. .
이 기사의 운영 환경: Windows 10 시스템, Laravel 버전 9, Dell G3 컴퓨터.
CSRF는 Cross-site request forgery의 영어 약어입니다.
Laravel 프레임워크에서 CSRF 공격을 피하는 것은 매우 간단합니다.
1 Laravel은 자동으로 각 사용자 세션에 대한 솔루션을 제공합니다. 로그인한 사용자와 요청자가 동일한 사람인지 확인하는 데 사용할 수 있는 CSRF 토큰. 그렇지 않으면 요청이 실패합니다. (원칙은 인증코드와 동일합니다.)
2. Laravel은 토큰 값을 얻기 위한 전역 도우미 함수 csrf_token을 제공하므로 보기 제출 양식에 다음 HTML 코드만 추가하면 토큰을 가져올 수 있습니다. request:
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
사례: 사례를 통해 CSRF 메커니즘 검증 구현
1. 양식 표시(get)용 경로와 요청 처리(post)용 경로 두 개를 만듭니다.
Route::get('test6','Home\TestController@test6');Route::post('test7','Home\TestController@test7');
2. 요구사항 생성 Method
public function test6(){ return view('home.test.test6'); } public function test7() { return "请求提交成功"; }
3. 필요한 간단한 양식을 생성합니다
4. 효과 제출(오류 페이지)
결론: 방금 사례를 통해 csrf 검증이 완료되었음을 알 수 있습니다. laravel의 메커니즘은 기본적으로 활성화되어 있습니다.
5. 오류 문제 해결(csrf 검증 통과 방법)
해결책: csrf에 필요한 토큰 값을 가져와서 request
<form action="/home/test/test7" method="post"> 用户名:<input type="text" name="username"><br> <input type="hidden" name="_token" value="{{csrf_token()}}"> {{csrf_field()}} <input type="submit" value="提交"></form>
와 함께 후속 메소드에 전달합니다. csrf_token 메소드 단순화: {{csrf_field( )}}
특정 표현 형식:
둘의 차이점:
Csrf_token은 토큰의 값만 출력합니다.
Csrf_field는 전체 입력 숨겨진 필드를 출력합니다.
나중에 사용할 때 선택하는 방법: 대부분의 경우 경우에는 상황 선택을 스스로 결정할 수 있습니다. 그러나 개발자가 선택할 수 있는 권한이 없고 csrf_token을 사용해야 하는 상황이 발생합니다. 이 경우 비동기 양식 제출 방법이 사용됩니다.
데이터를 얻기 위해 타사 API에 대한 요청과 같이 모든 요청이 CSRF 공격을 피할 필요는 없습니다.
제외할 요청 URL을 검증CsrfToken(app/Http/Middleware/VerifyCsrfToken.php) 미들웨어의 $just 속성 배열에 추가할 수 있습니다.
구성을 작성하여 예외 설정:
단일 경로 제외 작성 방법
'home.test.test6',
Multiple 요소는 ","로 구분되며 배열 작성 방법을 따릅니다.
'home.test.test6','home.test.test7'
모든 경로를 제외하고 csrf를 사용해야 하는 경우 다음과 같이 작성할 수 있습니다.
'*'
[관련 권장 사항: laravel 비디오 튜토리얼]
위 내용은 Laravel의 csrf 공격에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!