ホームページ > ウェブフロントエンド > htmlチュートリアル > [AY]ASP.NET MVC Html.AntiForgeryToken() による CSRF 攻撃の防止_html/css_WEB-ITnose

[AY]ASP.NET MVC Html.AntiForgeryToken() による CSRF 攻撃の防止_html/css_WEB-ITnose

WBOY
リリース: 2016-06-24 11:27:40
オリジナル
1453 人が閲覧しました

MVC の

Html.AntiForgeryToken() は、クロスサイト リクエスト フォージェリ (CSRF: クロスサイト リクエスト フォージェリ) 攻撃を防ぐために使用される対策です (XSS は CSS: Cross-Site-Script とも呼ばれます)。 ) 攻撃は異なります。XSS は通常、サイト上の信頼できるユーザーを使用して Web サイトに悪意のあるスクリプト コードを挿入して攻撃しますが、CSRF は信頼できるユーザーのふりをして Web サイトを攻撃します。

簡単な例を挙げると、たとえば、システム全体のお知らせが Web サイトのホームページに表示され、このお知らせがバックグラウンドから送信される場合、最も簡単な方法で記述します。

ホームページのお知らせを設定します。 Webサイトの背景(ホーム/インデックスページ)のコンテンツをHomeControllerのテキストアクション

に送信します
@using (Html.BeginForm("Text","Home",FormMethod.Post)){    @:网站公告:<input type="text" name="Notice" id="Notice" />    <input type="submit" value="Submit" />}
ログイン後にコピー

HomeControllerのテキストアクション

[HttpPost] public ActionResult Text() {     ViewBag.Notice = Request.Form["Notice"].ToString();     return View(); }
ログイン後にコピー

お知らせを記入、送信、表示

このとき、クロスサイト攻撃の脆弱性CSRF は通常、いくつかの条件に依存します

(1) 攻撃者が被害者がいるサイトを理解している

(2) 攻撃者のターゲットサイトに永続的な認証 Cookie があるか、被害者が現在のセッション Cookie を持っている

(3)現時点では、ターゲット サイトには、Web サイト上でのユーザーの行動に対する 2 番目の承認がありません

詳細については、こちらをご覧ください

http://baike.baidu.com/view/1609487.htm

ここで、アドレスがわかっていると仮定しますhttp://localhost:6060/Home/Text など、攻撃したい Web サイトの 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 サイトで受け取るパラメーター名と同じです。

「この 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 の「この Web サイトをハックする」をクリックすると、

が表示されます。これにより、クロスサイト攻撃が防止されます。

ページ上の Html.AntiForgeryToken() は、デフォルト名 __RequestVerificationToken の Cookie を訪問者に提供します

フォームの投稿を検証するには、検証である [ValidateAntiForgeryToken] 機能をターゲット アクションに追加する必要もあります

主にチェックします

(1) リクエストに合意された AntiForgery 名を持つ Cookie が含まれているかどうか

(2) リクエストに Request.Form["Agreed AntiForgery name"]、合意された AntiForgery を持つ Cookie が含まれているかどうか名前と Request .Form の値は一致しますか?

ページ上の Html.AntiForgeryToken() は、訪問者にデフォルト名 __RequestVerificationToken の Cookie を提供します

フォームの投稿を検証するには、[ValidateAntiForgeryToken] 機能を追加する必要もあります。ターゲット アクション (検証フィルター)

主にチェックします

(1) リクエストに合意された AntiForgery 名を持つ Cookie が含まれているかどうか

(2) リクエストに Request.Form["Agreed AntiForgery name" が含まれているかどうか]、合意された AntiForgery 名前 Cookie と Request.Form 値が一致するかどうか

これには主に System.Web.WebPages.dll の静的クラス AntiForgery が関係します

Html.AntiForgeryToken() は、AntiForgery 静的クラスの GetHtml メソッドを呼び出します。ランダムな値を生成し、クライアント Cookie とページの非表示フィールドにそれぞれ保存します。

(1)Request.Cookies[antiForgeryTokenName] (デフォルトも Request.Cookies["__RequestVerificationToken"])

(2)ページ上の隠しフィールド

<input name="__RequestVerificationToken" type="hidden" value="9rUlMYvsH6eMcFN9tn/wRwAG07eROraVaeTn9hHMXKkMmDbR8jLw5DKdVnZBJ9siQHeGyl1w4rSB141LnxMp2ahV0qP1lElPeukqfcUFYoxrm/EfpSJjZavykmzn15VeGFMKkmgFj5a1UFhZFaW2aZgeN38x9lt0OFSoca7eMVU=" />
ログイン後にコピー

ここで cookie キーの名前は、ページ上の隠しフィールドの名前と同じです。ApplicationPath が指定されている場合、それは「__RequestVerificationToken」と処理された ApplicationPath。

コントローラー側は、アクションに [ValidateAntiForgeryToken] 機能を追加することで検証します。

ValidateAntiForgeryTokenAttribute は、匿名デリゲート メソッドを渡すことで、

AntiForgery クラスの Validate メソッドを呼び出します。

Validate メソッドは主に Request.Cookies[antiForgeryTokenName] と の値が同じかどうかを検証します。

ページに 、または 2 つの値が等しくない場合は、例外がスローされます。

(2) mvc [ValidateAntiForgeryToken] における CSRF 攻撃と解決策について

1. CSRF とは何ですか?

CSRF (クロスサイト リクエスト フォージェリ)、中国語名: クロスサイト リクエスト フォージェリ、別名: ワン クリック攻撃/セッション ライディング、略称: CSRF/XSRF。

2. CSRF は何ができるのですか?

CSRF 攻撃は次のように理解できます。攻撃者はあなたの ID を盗み、あなたの名前を使って悪意のあるリクエストを送信します。 CSRF ができることには、あなたの名前で電子メールやメッセージを送信したり、アカウントを盗んだり、さらには商品の購入や仮想通貨の送金などが含まれます。引き起こされる問題には、個人のプライバシーと財産のセキュリティの漏洩が含まれます。

三.CSRF漏洞现状

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

四.CSRF的原理

从上图可以看出,要完成一次CSRF攻击,受害者必须依次完成两个步骤:

1.登录受信任网站A,并在本地生成Cookie。

2.在不登出A的情况下,访问危险网站B。

看到这里,你也许会说:“如果我不满足以上两个条件中的一个,我就不会受到CSRF的攻击”。是的,确实如此,但你不能保证以下情况不会发生:

1.你不能保证你登录了一个网站后,不再打开一个tab页面并访问另外的网站。

2.你不能保证你关闭浏览器了后,你本地的Cookie立刻过期,你上次的会话已经结束。(事实上,关闭浏览器不能结束一个会话,但大多数人都会错误的认为关闭浏览器就等于退出登录/结束会话了......)

3.上图中所谓的攻击网站,可能是一个存在其他漏洞的可信任的经常被人访问的网站。

以上内容转自:http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html

具体步骤:

1、在Html表单里面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻击。

2、相应的我们要在Controller中也要加入[ValidateAntiForgeryToken]过滤特性。该特性表示检测服务器请求是否被篡改。注意:该特性只能用于post请求,get请求无效。

3、至于JS,我们的项目中引用的是

在JS时要使用: $.ajaxAntiForgery才行,

如:

 $.ajaxAntiForgery({            type: "post",            data: { GroupName: $("#GroupName").val(), GroupPhones: $("#GroupPhones").val() },            dataType: "json",            url: "/Event/Mass/AddGroup",            success: function (data) {                if (data) {                    alert("添加成功 ");                    $.unblockUI();                }                else {                    alert("添加失败 ");                }         } })
ログイン後にコピー

注:对数据进行增删改时要防止csrf攻击!

(三)BeginFormAntiForgeryPost

Orchard1.6中,Module.txt文件中的设置AntiForgery:enable及页面中BeginFormAntiForgeryPost的作用也是一样的,不再赘述!

(四)参考网址

http://www.cnblogs.com/dragon_mail/archive/2011/07/10/2102364.html

http://blog.csdn.net/luck901229/article/details/8261640

本文转载地址: http://blog.csdn.net/cpytiger/article/details/8781457

AYJS.NET 排版整理

====== AYUI       www.ayjs.net      AY         =======

推荐您阅读更多有关于“aspnetmvc,”的文章

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート