在编辑视图中持久保存实体密钥的更安全的方法?

时间:2015-05-01 08:46:48

标签: asp.net asp.net-mvc asp.net-mvc-5

我总是对在视图中使用隐藏输入存储实体键感到担忧。即使是好奇的用户也很容易在浏览器控制台中编辑这个值,并且可能最终更新该用户不应该访问的实体。

是否有可行的方法在视图中保留此值而不会在加密等方面增加太多复杂性?

3 个答案:

答案 0 :(得分:0)

将其保存在javascript变量中。然后在postback上创建一个js函数并在那里使用它最合适(如果你使用AJAX回发它应该很容易;)

答案 1 :(得分:0)

您可以使用2种方法:

1st for Encryption
2nd for Decryption

(或者您也可以根据参数将加密和解密结合起来制作单一方法)

So, encrypt you query parameters in your GET Method. 
And decrypt you query parameters in your POST Method.

您还可以进行自定义ActionFilterAttribute来解密您的加密查询参数。 还有更多的方法可以解决此问题,但这第一步很难实现。

示例:

public enum EncryptType
{
   ENCRYPT,
   DECRYPT
};

public string EncryptDecrypt(EncryptType encType , string strtext)
{
            string result = string.empty;
            if (encryptionType == EncryptType.ENCRYPT)
            {
                 result = //Do Encryption on strtext
            }
            else if(encryptionType == EncryptType.DECRYPT)
            {
                result = //Do Decryption of strtext
            }
            return result;
}

答案 2 :(得分:0)

基本上,来自客户端的所有输入都可以由客户端修改,并且应视为不受信任。

即使您在会话中加密,哈希并存储哈希或以其他方式混淆id值,您仍无法正确处理访问控制。

如果其他用户想通过任何方式获得混淆后的值,然后使用其自己的凭据/ cookie提交该有效值,您将如何处理呢?

如果您未在登录用户发出请求时检查是否允许其访问指定的资源,则您的应用程序仍然易于滥用。

混淆值与执行访问控制检查相比,开销有多少?在硬件性能上并没有那么重要,但是开发人员的精神负担,调试,代码审查。