2016-06-26 45 views
0

約7歳のASP.NET Webサイトのセキュリティを検討しています。 2005年マスターページのないASP.NET WebフォームでのCSRF攻撃からの保護

から

Protected Overrides Sub OnInit(ByVal e As System.EventArgs) 
    MyBase.OnInit(e) 

    If Request.IsSecureConnection = True Then 
     ViewStateUserKey = Session.SessionID 
    End If 
End Sub 

このアドバイスは、次のMSDN Articleから来ている:サイトが作成された時点では、Microsoftのガイダンスは、(ページの背後にあるすべてのコードによって継承されます)、共通のベースページに以下を追加しました私の質問は、これが依然としてCSRF攻撃から守る有効かつ効果的な手法であるかどうかです。

このトピックについてはSO questionを読んでいますが、CSRFのVisual Studio 2012+プロジェクト自動生成保護がマスターページに追加されているようです。私が検討しているサイトでは、CSSの競合が原因でマスターページが使用されず、マスターページを現在のアップデートに追加することもできません。

+0

上記の機能がCSRFをどのように防止しますか? – Legends

答えて

1

はい、ViewStateMacが有効な場合、CSRFが軽減されます。

これは、個々のユーザーが自分のキー(セッションID)で認証されたViewStateを持つためです。

副作用が発生するたびにViewStateがサーバーにポストバックされるため、ASP.NETは実際にViewState値が現在のユーザーのものであることを検証します。

したがって攻撃者は、これを実行するために犠牲者のセッションIDを持たないため、犠牲者に提出するPOST要求を構成することはできません。

上記は、副作用を持つすべてのリクエストがポストバックを介して行われることを前提としています。つまり、アプリケーションはRFC 7231 in regards to the definition of "safe" methodsの後にあり、ポストバックメカニズム以外のPOST要求のハンドラはありません。

JQueryなどのカスタムAJAXリクエストは、ポストバックとして実装されていないため、CSRFから保護されません。

X-Requested-Withのように、これらのカスタムヘッダーを設定して確認することをお勧めします。さまざまなFlashの脆弱性のため、ヘッダーにトークンを渡してサーバー側を確認することもできます。

関連する問題