標籤:簡單 ldd asp.net 代碼 修改 驗證 使用 nbsp lan
簡介
過多發布的內容相對比較簡單,因此,我只打算把原文中的一些關鍵資訊翻譯一下。原文連結如下:
http://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
範例程式碼下載:
https://code.msdn.microsoft.com/ASPNET-MVC-Application-b01a9fe8
分析
假設有一個類Student,它用於和資料庫建立映射,而且Student中的一個欄位Secret你不想在頁面上修改它的值。
即使介面上沒有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; }
}
Web安全相關(四):過多發布(Over Posting)