| プロパティ | 値 |
|---|---|
| ルール ID | CA5368 |
| Title | ページから派生したクラスに ViewStateUserKey を設定します |
| [カテゴリ] | Security |
| 修正が破壊的変更か非破壊的変更であるか | なし |
| .NET 10 で既定で有効 | いいえ |
| 該当する言語 | C# と Visual Basic |
原因
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;
}
}
.NET