次の方法で共有


CA5368: ページから派生したクラスに ViewStateUserKey を設定します

プロパティ
ルール ID CA5368
Title ページから派生したクラスに ViewStateUserKey を設定します
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

Page.ViewStateUserKey プロパティが Page.OnInit または Page_Init メソッドで割り当てられていません。

規則の説明

ASP.NET Web フォームを設計するときには、クロスサイト リクエスト フォージェリ (CSRF) 攻撃に注意してください。 CSRF では、認証されたユーザーから ASP.NET Web フォームに悪意のある要求が送信される可能性があります。

ASP.NET Web フォームで CSRF 攻撃を防止する方法の 1 つは、ページの ViewStateUserKey を予測不可能でセッションにとって一意の文字列に設定することです。 詳細については、「ASP.NET の組み込み機能を活用し、Web 攻撃を回避する」を参照してください。

違反の修正方法

ViewStateUserKey プロパティを予測不可能でセッションごとに一意の文字列に設定します。 たとえば、ASP.NET セッション状態を使用する場合は、HttpSessionState.SessionID が機能します。

どのようなときに警告を抑制するか

次の場合は、このルールの警告を抑制できます。

  • ASP.NET Web フォームページで、機密性の高い操作が実行されない。
  • クロスサイト リクエスト フォージェリ攻撃が、この規則によって検出されない形で軽減されている。 たとえば、ページが 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;
    }
}