簡體   English   中英

模型綁定程序以解密字符串並將其轉換為int

[英]Model binder to decrypt string and convert to int

我有一個模型,其屬性idint類型。

我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM