asp.net mvc の Html.AntiForgeryToken() は、クロスサイト リクエスト フォージェリ攻撃を防ぐことができます (XSS は、CSS とも呼ばれます: クロスサイト スクリプト)。XSS は通常、内部の信頼を使用します。ユーザーは悪意のあるスクリプト コードを Web サイトに挿入して攻撃しますが、CSRF は信頼できるユーザーになりすまして Web サイトを攻撃します。
簡単な例を挙げると、例えば、システム全体のお知らせは Web サイトのトップページに表示され、このお知らせはバックグラウンドから送信されます。
という最も単純な書き方をします。
Webサイトの背景(ホーム/インデックスページ) ホームページのお知らせ内容を設定し、HomeControllerのText Actionに送信
@using (Html.BeginForm("Text","Home",FormMethod.Post)) { @:输入信息:<input type="text" name="Notice" id="Notice" /> <input type="submit" value="Submit" /> } HomeController的Text Action[HttpPost] public ActionResult Text() { ViewBag.Notice = Request.Form["Notice"].ToString(); return View(); }
お知らせを完了し、送信して表示
現時点では、クロスサイト攻撃の脆弱性を悪用するために、CSRF は一般にいくつかの条件に依存します
(1) 攻撃者は被害者がいるサイトを知っています
(2) 攻撃者のターゲット サイトが永続的な認証 Cookie を持っている、または被害者が現在のセッション Cookie を持っている
(3) 現時点では、ターゲット サイトは Web サイト上でのユーザーの行動に対する 2 番目の認証を持っていない
次に、リクエスト アドレスが http://localhost:25873/Home/Text であり、条件 2 と 3 も満たしていると仮定して、クロスサイト リクエストのシミュレーションを開始しましょう。
そこで、次の内容を含む新しい AntiForgeryText.html ファイルを作成しました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title></title> </head> <body> <form name="badform" method="post" action="http://localhost:6060/Home/Text"> <input type="hidden" name="Notice" id="Notice" value="你的网站被我黑了。。" /> <input type="submit" value="黑掉这个网站" /> </form> </body> </html>
この HTML では、隠しフィールド、名前、ID、およびパラメーター名を追加しました。ウェブサイトでも同様に受信できます。
「この Web サイトをハックする」をクリックすると次のように表示されます
これは、ホームページ上のお知らせを変更するために脆弱性を利用しています。これは単純なクロスサイトの例です。攻撃。 。
MVC では、ページで Html.AntiForgeryToken() を使用し、対応するアクションに [ValidateAntiForgeryToken] 機能を追加することで、クロスサイト攻撃を防止します。
上記のコードを
@using (Html.BeginForm("Text","Home",FormMethod.Post)) { @Html.AntiForgeryToken() @:网站公告:<input type="text" name="Notice" id="Notice" /> <input type="submit" value="Submit" /> } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Text() { ViewBag.Notice = Request.Form["Notice"].ToString(); return View(); }
に変更します。このようにして、AntiForgeryText.html の "Hack this website" をクリックし、再度リクエストを行います
これにより、クロスサイト攻撃を防ぐことができます
参考: asp.net mvc の @Html.AntiForgeryToken() により、クロスサイト攻撃が防止されます http://www.ourcodelife.com/thread -49179- 1-1.html