質問: ASP.NET MVCで開発をしています。 セキュリティについて質問をさせて頂きます。 【前提】 同期通信および、非同期通信において、 正規のリクエストが否かを判断するため、 ビュースクリプト(.cshtml)に「@Html.AntiForgeryToken()」を記載し、 Controllerには同期通信のアクションメソッドの場合は[ValidateAntiForgeryToken]属性、 非同期通信のアクションメソッドの場合は[ValidateAntiForgeryTokenForAllPost]属性を付与しています。 【質問事項】 以下の用に複数の部分ビューがある場合においても、 一か所で「@Html.AntiForgeryToken()」の記載があれば問題はないのでしょうか? index.cshtml(ここに「@Html.AntiForgeryToken()」を記載) ┗_partialView1.cshtml(ここには記載不要) ┗_partialView2.cshtml(ここには記載不要) お手数ですが、ご存知の方がいらっしゃいましたらご教示願います。
回答: ひとつで大丈夫です。 というか、ひとつのフォームの中に複数@Html.AntiForgeryToken()が存在すると下記のエラーが発生します。 > > 偽造防止トークンを暗号化解除できませんでした。このアプリケーションが Web Farm またはクラスターによってホストされている場合、すべてのコンピューターで同じバージョンの ASP.NET Web Pages が実行されていて、 構成が明示的な暗号化と検証キーを指定していることを確認してください。AutoGenerate をクラスターで使用することはできません。 > > > そのため、_partialViewでは記載はせず、呼びだし元で偽造防止トークンを作ってあげるのが得策かと思います><