MVC の
Html.AntiForgeryToken() は、クロスサイト リクエスト フォージェリ (CSRF: クロスサイト リクエスト フォージェリ) 攻撃を防ぐために使用される対策です (XSS は CSS: Cross-Site-Script とも呼ばれます)。 ) 攻撃は異なります。XSS は通常、サイト上の信頼できるユーザーを使用して Web サイトに悪意のあるスクリプト コードを挿入して攻撃しますが、CSRF は信頼できるユーザーのふりをして Web サイトを攻撃します。
簡単な例を挙げると、例えば、システム全体のお知らせが Web サイトのホームページに表示され、このお知らせがバックグラウンドから送信されるとします。
ホームページを設定する という最も単純な書き方を使用します。 Web サイトの背景 (ホーム/インデックス ページ) のアナウンス コンテンツ、HomeController に送信されたテキスト アクション
[html] プレーン コピーを表示
HomeController のテキストアクション
[csharp] プレーンコピーを表示
詳細については、http://baike を参照してください。 .baidu.com/view/1609487.htm
ここで、攻撃したい Web サイトのアドレス (例: http:// localhost:6060/Home/Text) がわかっており、条件 2 と条件も満たしていると仮定します。 3.
そこで、次の内容を含む新しい AntiForgeryText.html ファイルを作成しました:
[html]
view plain copy
post" action=" http://localhost:6060/Home/Text">
この中で、名前と ID はパラメータと同じ隠しフィールドが追加されます。ウェブサイトが受け取る名前。
「この Web サイトをハックする」をクリックすると、次のように表示されます
これは、脆弱性を利用して、ホームページ上のアナウンスを変更するものです。これは、単純なクロスサイト攻撃の例です。
[html] view plain copy
对应的アクション
[csharp] プレーン表示 コピー
この子私はAntiForgeryText.html の中点「黑掉この网站」,就会出现
この種は跨站攻撃击を阻止します。
页面上のHtml.AntiForgeryToken () 会議参加者の __RequestVerificationToken という名前の cookie
はフォームからの投稿を承認するため、目上のアクションに [ValidateAntiForgeryToken] 特性を追加する必要があります。(1)要求に、指定された AntiForgery 名の cookie が含まれているかどうか
(2) 要求に、Request.Form["指定された AntiForgery 名"]、指定された AntiForgery 名の cookie と Request.Form が一致するかどうか
主に System.Web.WebPages.dll 内の静的な AntiForgery
Html.AntiForgeryToken() に関連する AntiForgery の静的な GetHtml メソッドを使用して、クライアント Cookie と表面の隠しフィールドにそれぞれ格納されます。(1)Request.Cookies[antiForgeryTokenName](默认もRequest.Cookies["__RequestVerificationToken"])
(2)页面上のhiddenfield
[html]
view plain copy
< ;input name="__RequestVerificationToken" type="hidden" value="9rUlMYvsH6eMcFN9tn/wRwAG07eROraVaeTn9hHMXKkMmDbR8jLw5DKdVnZBJ9siQHeGyl1w4rSB141LnxMp2ahV0qP1lElPeukqfcUFYoxrm/EfpSJ jZavykmzn15VeGFMKkmgFj5a1UFhZFaW2aZgeN38x9lt0OFSoca7eMVU=" />
Validate メソッド内で、AntiForgery の Validate メソッドを使用します。主要验证Request.Cookies[antiForgeryTokenName] と二つの值が同じかどうか、
如果页面がない、または二者不相等
(二)CSRF 攻撃に関する解決策 [ValidateAntiForgeryToken]
一.CSRF とは何か么?
CSRF(クロスサイト) request forgery)、中文名:跨站请求伪造、別名:ワンクリック攻撃/セッションライディング、表記:CSRF/XSRF。 CSRF が実行できる状況には、名前を使ってファイルを送信したり、メッセージを送信したり、番号を盗んだり、商品を偽装したり、仮想通貨を転送したりすることが含まれます。 ....造られた問題には、個人の私的暴露と生産の安全性が含まれます。CSRF攻撃手法は2000年に外国の安全保障関係者によって提案されましたが、中国で注目され始めたのは2006年になってからでした。2008年には、国内外の複数の大規模コミュニティやインタラクティブなWebサイトでCSRFの脆弱性が暴露されました。 .com (New York Times)、Metafilter (大規模な BLOG Web サイト)、YouTube、Baidu HI... 現在、インターネット上の多くのサイトはまだこの問題に対して準備ができていません。そのため、セキュリティ業界は CSRF を「眠れる巨人」と呼んでいます。
4. CSRF の原理
上の図からわかるように、被害者は 2 つのステップを順番に完了する必要があります:
1.信頼できる Web サイト A、およびローカルで Cookie を生成します。
2. Aからログアウトせずに危険なWebサイトBにアクセスします。
これを見て、あなたはこう言うかもしれません:「上記の2つの条件のいずれかを満たさなければ、CSRFから攻撃されることはありません。」はい、その通りですが、次のような状況が起こらないとは保証できません:
1. Web サイトにログインした後、タブ ページを開いて別の Web サイトにアクセスしないという保証はできません。
2. ブラウザを閉じた後、ローカル Cookie がすぐに期限切れになり、最後のセッションが終了することを保証することはできません。 (実際には、ブラウザを閉じることでセッションを終了することはできませんが、ほとんどの人はブラウザを閉じることがセッションのログアウト/終了と同等であると誤解しています...)
3. 上の写真のいわゆる攻撃 Web サイト、それは信頼できる、頻繁にアクセスされる Web サイトに他の脆弱性がある可能性があります。
上記の内容は以下から転載されています:
具体的な手順:
1. CSRF 攻撃を防ぐには、HTML フォームで @Html.AntiForgeryToken() を使用します。
2. それに応じて、[ValidateAntiForgeryToken] フィルター機能をコントローラーに追加する必要があります。この機能は、サーバーリクエストが改ざんされているかどうかを示します。注: この機能は post リクエストにのみ使用でき、get リクエストは無効です。
3. JS に関しては、プロジェクトは