ASP.NET Core RazorPages의 위조 방지 토큰

지금까지, 「ASP.NET Core 3.0 RazorPages사 시작」이라고 타이틀을 사용했지만, 이번부터 「사 시작」은 취하기로 합니다.

양식 태그 도우미의 위조 방지 토큰



Razor Pages에서 FormTagHelper는 form 요소에 위조 방지 토큰을 삽입합니다.
<form method="post">
    ...
</form>

이제 다음과 같은 숨겨진 입력 태그(위조 방지 토큰)가 자동으로 삽입됩니다.
 <input name="__RequestVerificationToken" type="hidden" value="CfDJ8Kws0PPAm1NChsmiTNfRcsX0TTepdsJf6F51WcaEnzEJH9W0IvKaCaoa7btzRNswqHlUXgzrHgA6rfcka5Jqt3u_93IMOSpOLtDRapBkHEPPhl7sGZ1lwyYlgzEcYpAcGKNeK-zL_8IaHnwMa0-viyY" />

이는 교차 사이트 요청 포제리(Cross site request forgeries, CSRF)라는 취약점 대책을 수행하기 위한 것입니다.

시도하려면 브라우저 개발자 도구를 사용하여 토큰을 다시 작성하고 제출해 보겠습니다.



HTTP ERROR 400 오류가 발생했습니다.

AutoValidateAntiforgeryToken 속성



조사해 보면, AutoValidateAntiforgeryToken라든지 ValidateAntiForgeryToken 라는 속성이 있습니다만, 자동 생성된 소스에는 이러한 속성을 사용하고 있는 개소는 어디에도 없습니다.

기본적으로 AutoValidateAntiforgeryToken 가 적용된 것 같습니다.

위조 방지 토큰을 생성하지 않음



asp-antiforgery="false"



다음과 같이 작성하면 위조 방지 토큰이 생성되지 않습니다.
<form method="post"  asp-antiforgery="false">
    ...
</form>

음, 굳이 그렇게 하는 이유는 보통은 없다고 생각합니다만...

IgnoreAntiforgeryToken 속성


IgnoreAntiforgeryToken 속성을 사용하면, 특정의 페이지 혹은, 특정의 페이지 핸들러 (아무래도 이 이름을 기억할 수 없다...)만, 위조 방지 토큰의 필요성을 없앨 수가 있습니다.

튜토리얼에서 작성한 프로그램의 EditModel 클래스에 IgnoreAntiforgeryToken 속성을 사용해보십시오.

    [IgnoreAntiforgeryToken]
    public class EditModel : PageModel
    {


이번에는 브라우저 개발 도구를 사용하여 토큰을 다시 작성해도 오류가 발생하지 않고 데이터를 업데이트 할 수있었습니다.

이 속성도 전술의 asp-antiforgery 와 같이, 통상의 RazorPages 어플리케이션에서는, 이것을 사용하는 것은 거의 없을 것 같습니다.

좋은 웹페이지 즐겨찾기