MVC 3----Webサイトのセキュリティ
=============================================================
①: @Html.Encode("
②: @Html.AttributeEncode("
③: @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ファイルですべてのクッキーを設定(サイトへのクッキーアクセスを停止)
==================================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);
}
==================================================