MVC 3----Webサイトのセキュリティ



=============================================================
 
①: @Html.Encode("alert('123')")符号化後:<script>alert('123')</script>
②: @Html.AttributeEncode("alert('123')")符号化後:<script>alert('123')</script>
③: @Html.JavascriptEncode()
③:antixssライブラリで防御する
 
                                                                                                               
==================================================================
 
①:トークン検証(フォーム検証用)提出フォームに@Htmlを付ける.AntiForgeryToken()は、コントローラに[ValidateAntiforgeryToken]を付けます.
②:HttpReferrer検証(get、post)
新しいクラスを作成し、AuthorizeAttribute(コミット時に検証)を継承します.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace SchoolManageDomw.Models
{
    public class IsPostedThisSiteAttribute:AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.HttpContext != null)
            {
                if (filterContext.HttpContext.Request.UrlReferrer == null)
                    throw new Exception(" ");
                if (filterContext.HttpContext.Request.UrlReferrer.Host != "localhost")//MySite.com
                    throw new Exception(" ");
            }
        }
    }
}

コントローラで使用:
        [IsPostedThisSite]
        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            return RedirectToAction("Index", "Home");
        }

 
 
========================================================
 
1,クッキーには主に2つの形式がある:①:セッションクッキー:セッションクッキーはブラウザの内容に格納され、ブラウザの要求毎にhttpヘッダを介して②:持続性クッキー:持続性クッキーはコンピュータの実際のファイルに格納され、セッションクッキーと同じ方法で伝達される
 
2,HttpOnlyを使用してクッキーの盗難を阻止する①: web.configファイルですべてのクッキーを設定(サイトへのクッキーアクセスを停止)    ②:プログラムで作成する各クッキーの個別設定(サーバがクッキーを変更または設定する以外、クッキーに対する操作は無効)Response.Cookies["MyCookie"].Value = "userid";Response.Cookies["MyCookie"].HttpOnly = true;
 
==================================4、繰り返しコミット
 
①:ホワイトリストを使用してバインディングを許可するフィールドを指定する[Bind(Include=“Name,Content”)②:ブラックリストを使用してバインディングを禁止するフィールドを除外する[Bind(Exclude=“Price,OrderID”)]はモデルクラスでもコントローラ操作パラメータでも使用できます
例:モデルで使用する:[Bind(Include="Name,Content")]public class product()コントローラ操作パラメータで使用する:public ActionResult Edit([Bind(Include="STU_NAME,STU_MONEY")]PersonErrorp,string returnUrl)
 
===================================================
1、例:
例えばあなたは工商銀行で、私は犯罪者です.あなたのサイトはwww.icbc.です.com.cn、www.icbc 888というサイトを作りました.cn、私はウェブサイトをあなたと同じように見せます.私はフォーラムでこのような投稿を発表しました:早く来て、工商銀行はお年玉を配って、ここをクリックします:http://www.icbc.com.cn/account/login?returnUrl=www.icbc888.cn.ユーザーはこのリンクが工商銀行だと思っているように見えますが、クリックするとwww.icbc 888にジャンプします.cn、後のことは想像できます.
 
2,コントローラコード(ログイン):
returnUrl:リダイレクトパス
        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                   // 
                    if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                        && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
                    {
                        return Redirect(returnUrl);
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
                else
                {
                    ModelState.AddModelError("", " 。");
                }
            }
            //  , 
            return View(model);
        }

 
==================================================
 
On:サーバが開発した最も安全なオプションです.エラーメッセージRemoteOnlyは常に非表示です.多くのユーザーに一般的なエラーメッセージを表示しますが、サーバアクセス権を持つユーザーに完全なエラーメッセージOffを表示します.最も攻撃を受けやすいオプションです.Webサイトにアクセスするすべてのユーザーに詳細なエラーメッセージを表示します.