세션이 끊겼을 때 POST 통신을 통해 419 오류를 방지하는 방법
개시하다
보안상의 이유로 세션의 지속 시간을 자주 설정하지만, 세션이 중단되었을 때의 대응은 무시하기 쉽다.
이번에는 라벨에서 세션이 끊긴 상태에서 POST 통신을 할 때 419 오류를 방지하는 방법을 살펴본다.
419 오류 방지 대응 방법
세션이 만료된 상태에서 POST 통신을 할 때 CSRF 토큰이 만료되어 419 오류가 표시됩니다.
그러나 이용자들은 419 잘못된 화면을 보고도 이유를 몰라 친근하다고 할 수 없었다.
이번에 제작된 서비스는 세션 유효기간이 끝나면 GET 통신을 할 때 로그인 화면으로 바뀌기 때문에 POST 통신의 경우도 마찬가지다.
Laavel에 오류가 발생했을 때의 행동에 관하여 공식 문서에는 다음과 같습니다.
오류와 예외 처리는 새 Lavel 프로젝트를 시작할 때 가장 먼저 설정됩니다.App\Exceptions\Handle r레벨은 응용 프로그램이 던지는 모든 예외를 기록하고 사용자에게 렌더링 서비스를 제공하는 곳입니다.
Laravel 8.오류 처리
따라서
App\Exceptions\Handler
를 살펴보면render() 방법 내$e = $this->prepareException($e);
에서 다음과 같다. /**
* Prepare exception for rendering.
*
* @param \Throwable $e
* @return \Throwable
*/
protected function prepareException(Throwable $e)
{
if ($e instanceof ModelNotFoundException) {
$e = new NotFoundHttpException($e->getMessage(), $e);
} elseif ($e instanceof AuthorizationException) {
$e = new AccessDeniedHttpException($e->getMessage(), $e);
} elseif ($e instanceof TokenMismatchException) { // ここでCSFトークンが有効期限切れの場合は419エラーを返すようにしている
$e = new HttpException(419, $e->getMessage(), $e);
} elseif ($e instanceof SuspiciousOperationException) {
$e = new NotFoundHttpException('Bad hostname provided.', $e);
}
return $e;
}
CSRF의 유효기간이 만료되면 날아오지 않고prepareException()
방향을 바꾸는 것이 좋다.따라서render() 방법을 다시 쓰기 위해
app/Exceptions/Handler.php
에 다음 코드를 추가했습니다. public function render($request, \Throwable $e)
{
if ($e instanceof TokenMismatchException) {
return redirect()
->back();
}
return parent::render($request, $e);
}
세션의 유효기간이 지난 상태에서 POST 통신을 해도 419 오류가 발생하지 않고 로그인 화면으로 리디렉션할 수 있습니다!최후
POST 통신을 하기 전에 장시간 방치하는 경우가 드물기 때문에 이번처럼 오류를 발견하는 경우는 드물다고 생각한다.
새로운 프로젝트에 참여할 때 여기서 잘 설정해서 발매했으면 좋겠어요.
끝까지 읽어주셔서 감사합니다!
참고 자료
Reference
이 문제에 관하여(세션이 끊겼을 때 POST 통신을 통해 419 오류를 방지하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/yuzuyuzu0830/articles/3952e36dc91705텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)