您好,登錄后才能下訂單哦!
=======================================一、防止跨站腳本***(XSS)
①: @Html.Encode("<script>alert('123')</script>")
編碼后:<script>alert('123')</script>
②: @Html.AttributeEncode("<script>alert('123')</script>")
編碼后:<script>alert('123')</script>
③: @Html.JavascriptEncode()
③: 使用antixss庫防御
=======================================二、防止跨站請求偽造(CSRF)
①: 令牌驗證(用于表單驗證)
在提交表單中加上@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"); }
=======================================三、cookie竊盜
1,cookie主要有兩種形式:
①:會話cookie:會話cookie存儲在瀏覽器的內容中,在瀏覽器的每次請求中通過http頭傳遞
②:持久性cookie:持久性cookie存儲于計算機的實際文件中,并與會話cookie以相同的方式傳遞
2,使用HttpOnly阻止cookie竊盜
①:web.config文件中對所有cookie進行設置
(停止腳步對站點的cookie訪問)
<system.web>
<httpCookies domain="" httpOnlyCookies="true" requireSSL="false"/>
</system.web>
②:在程序中為編寫的每一個cookie單獨設置
(除了服務器修改或設置cookie之外,其他一些對cookie的操作均無效)
Response.Cookies["MyCookie"].Value = "userid";
Response.Cookies["MyCookie"].HttpOnly = true;
=======================================四、重復提交
①:使用白名單指定允許綁定的字段
[Bind(Include="Name,Content")]
②:使用黑名單排除禁止綁定的字段
[Bind(Exclude="Price,OrderID")]
可以用在模型類中,也可以用在控制器操作參數中
例:
模型中使用:
[Bind(Include="Name,Content")]
public class product()
控制器操作參數中使用:
public ActionResult Edit([Bind(Include = "STU_NAME,STU_MONEY")]PersonError p, string returnUrl)
=======================================五、開放重定向
1,例子:
比如你是工商銀行,我是一個罪犯。
你的網站叫 www.icbc.com.cn,我建立了一個網站叫 www.icbc888.cn,我讓網站看起來和你的一樣。
我在論壇上發布這樣一個帖子:
快來啊,工商銀行派發紅包啦,點這里:http://www.icbc.com.cn/account/login?returnUrl=www.icbc888.cn。用戶看起來會覺得這個鏈接是工商銀行的,但是當它點進去以后,會被跳轉到www.icbc888.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("http://") && !returnUrl.StartsWith("/\\")) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "提供的用戶名或密碼不正確。"); } } // 如果我們進行到這一步時某個地方出錯,則重新顯示表單 return View(model); }
=======================================六、適當的錯誤報告和堆棧跟蹤
<customErrors mode="Off"></customErrors>
On:服務器開發的最安全選項,因為它總是隱藏錯誤提示消息
RemoteOnly:向大多數用戶展示一般的錯誤提示消息,但向擁有服務器訪問權限的用戶
展示完整的錯誤提示消息
Off:最容易受到***的選項,它向訪問網站的每個用戶展示詳細的錯誤提示消息
<customErrors mode="On" redirectMode="ResponseRedirect" defaultRedirect="~/Home/Index">
<!--服務器返回404錯誤跳轉的指定頁面-->
<error redirect="~/Home/Index" statusCode="404"/>
</customErrors>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。