Share via


CA5368: 페이지에서 파생된 클래스에 대해 ViewStateUserKey 설정

속성
규칙 ID CA5368
타이틀 Page에서 파생된 클래스의 ViewStateUserKey를 설정하세요.
범주 보안
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

Page.ViewStateUserKey 속성이 Page.OnInit 또는 Page_Init 메서드에서 할당되지 않았습니다.

규칙 설명

ASP.NET 웹 양식을 설계할 때 CSRF(교차 사이트 요청 위조) 공격에 유의해야 합니다. CSRF 공격은 인증된 사용자의 악의적인 요청을 ASP.NET 웹 양식으로 보낼 수 있습니다.

ASP.NET 웹 양식에서 CSRF 공격으로부터 보호하는 한 가지 방법은 페이지의 ViewStateUserKey를 세션에 고유하고 예측할 수 없는 문자열로 설정하는 것입니다. 자세한 내용은 Take Advantage of ASP.NET Built-in Features to Fend Off Web Attacks(웹 공격을 막는 ASP.NET 기본 제공 기능 활용)를 참조하세요.

위반 문제를 해결하는 방법

세션별로 ViewStateUserKey 속성을 예측할 수 없는 고유한 문자열로 설정합니다. 예를 들어 ASP.NET 세션 상태를 사용하는 경우 HttpSessionState.SessionID가 작동합니다.

경고를 표시하지 않는 경우

다음 경우에는 이 규칙의 경고를 표시하지 않아도 됩니다.

  • ASP.NET 웹 양식 페이지가 중요한 작업을 수행하지 않습니다.
  • 이 규칙이 탐지하지 않는 방식으로 교차 사이트 요청 위조 공격이 완화됩니다. 예를 들어 페이지가 CSRF 방어를 포함하는 마스터 페이지에서 상속되는 경우입니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

#pragma warning disable CA5368
// The code that's violating the rule is on this line.
#pragma warning restore CA5368

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

[*.{cs,vb}]
dotnet_diagnostic.CA5368.severity = none

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

의사 코드 예제

위반

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
    }
}

해결 방법

using System;
using System.Web.UI;

class ExampleClass : Page
{
    protected override void OnInit (EventArgs e)
    {
        // Assuming that your page makes use of ASP.NET session state and the SessionID is stable.
        ViewStateUserKey = Session.SessionID;
    }
}