[英]Model binder to decrypt string and convert to int
我有一個模型,其屬性id
為int
類型。
我在URL中傳遞了id
,例如Detail/20
以獲取數據。 但是,現在我的客戶說他們不想看到id
,因為任何人都可以修改並查看其他記錄。
現在,我決定對其進行加密和解密,並將其分配給另一個屬性: encId
。
public ActionResult List()
{
foreach(Employee e in empList)
{
e.encId = MyUtil.Encrypt(id,"sessionid");
}
return View(empList);
}
最后,我將自己的網址設置為Detail/WOgV16ZKsShQY4nF3REcNQ==/
。
現在,我所需要做的就是將其解密回原始形式,並將其分配給int
類型的屬性id
。
public ActionResult Detail(int id) //don't want (string id)
{
}
如何編寫解密並轉換為有效id
模型資料夾? 同樣,如果發生任何錯誤/異常,它也必須重定向到404錯誤頁面。 當用戶手動編輯url(加密的ID)中一些無用的文本時,可能會發生這種情況。
首先,這不是確保網站和數據安全的方法。 請看一下“ 通過隱蔽性實現安全性 ”問題。 您最好在每個員工記錄上定義權限集,以及可以或不能編輯它們的權限。 這樣的例子可能看起來像這樣:
public ActionResult Detail(int id)
{
if(MySecurityProvider.CanView(id, HttpContext.Current.User.Identity.Name){
return View();
}
Return RedirectToAction("PermissionIssue", "Errors");
}
話雖如此,要繼續您的工作,只需在操作結果內進行解密即可。
public ActionResult Detail(string Id)
{
int actualId;
try{
actualId = MyUtil.Decrypt(id);
}catch(Exception e){
//someone mucked with my encryption string
RedirectToAction("SomeError", "Errors");
}
var employee = MyEmployeeService.GetEmployeeById(actualId);
if(employee == null){
//This was a bad id
RedirectToAction("NotFound", "Errors");
}
Return View(employee);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.