標籤:方法 ast get 服務 virtual ram 而且 表單 name
1、防止跨網站提交
傳統mvc中,ValidateAntiForgeryToken特性用於防止跨網站資料提交,但是使用時必須配合前台view頁面的Html.AntiForgeryToken()代碼一起使用。
而在asp.net core中,taghelper表單特性已經將該特性包含在view中伺服器特性代碼asp-action 或者asp-route中了,詳見TagHelper參考我的另一個博文http://www.cnblogs.com/xiatianoo/p/6323245.html
2、防止過多提交
防止過多提交,及過多傳遞實體欄位值,這時Bind特性就派上用場了,Bind特性限制傳遞的欄位,同時,配合Include,Exclude和TryUpdateModel參數來設定限定特殊欄位。
假設有一個類Student,它用於和資料庫建立映射,而且Student中的一個欄位Secret你不想在頁面上修改它的值。
public class Student { public int ID { get; set; } public string LastName { get; set; } public string FirstMidName { get; set; } public DateTime EnrollmentDate { get; set; } public string Secret { get; set; } public virtual ICollection<Enrollment> Enrollments { get; set; } }
即使介面上沒有Secret對應的欄位,hacker可以通過一些工具(如fildder)或者編寫js去發送請求來修改Secret的值。
如,Secret的值會被修改為OverPost。
防止
在ASP.NET中,防止過多發布的方法大概有以下幾種:
1. 使用BindAttribute中的Include屬性,把需要映射的欄位加到白名單。
public ActionResult Create([Bind(Include = "LastName, FirstMidName, EnrollmentDate")]Student student)
2. 使用BindAttribute中的Exclude屬性,把不允許映射的欄位加到黑名單。
public ActionResult Create([Bind(Exclude = "Secret")]Student student)
3. 使用TryUpdateModel方法,驗證Model的時候,制定需要映射的欄位。
if (TryUpdateModel(student, "", new string[] { "LastName", "FirstMidName", "EnrollmentDate" }))
{
}
4. 定義一個新的類作為輸入參數
public class StudentForm
{
public string LastName { get; set; }
public string FirstMidName { get; set; }
public DateTime EnrollmentDate { get; set; }
}
該博文參考原官方文檔:https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-basic-crud-functionality-with-the-entity-framework-in-asp-net-mvc-application#overpost
該博文參考大牛翻譯:http://www.cnblogs.com/Erik_Xu/p/5497501.html
asp.net 表單提交安全知識