Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在编辑视图中持久化实体密钥的更安全的方法?_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

Asp.net 在编辑视图中持久化实体密钥的更安全的方法?

Asp.net 在编辑视图中持久化实体密钥的更安全的方法?,asp.net,asp.net-mvc,asp.net-mvc-5,Asp.net,Asp.net Mvc,Asp.net Mvc 5,我总是担心仅仅在视图中使用隐藏输入来存储实体键。即使是好奇的用户也很容易在浏览器控制台中编辑此值,并可能最终更新该用户无权访问的实体 有没有一种可行的方法可以在视图中持久化此值,而不增加加密等的太多复杂性?将其保存在javascript变量中。然后在回发时创建一个js函数,并在其中最适当地使用它(如果使用AJAX回发,应该很容易;)您可以使用两种方法: 1st for Encryption 2nd for Decryption (也可以根据参数制作加解密结合的单一方法) 您还可以自定义Acti

我总是担心仅仅在视图中使用隐藏输入来存储实体键。即使是好奇的用户也很容易在浏览器控制台中编辑此值,并可能最终更新该用户无权访问的实体


有没有一种可行的方法可以在视图中持久化此值,而不增加加密等的太多复杂性?

将其保存在javascript变量中。然后在回发时创建一个js函数,并在其中最适当地使用它(如果使用AJAX回发,应该很容易;)

您可以使用两种方法:

1st for Encryption
2nd for Decryption
(也可以根据参数制作加解密结合的单一方法)

您还可以自定义
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;
}

从本质上说,客户机的所有输入都是可修改的,应该被视为不可信的

即使您在会话中加密、散列和存储散列,或者以其他方式混淆id值,您仍然没有正确处理访问控制

如果其他用户以任何方式获取模糊值,然后使用自己的凭据/cookie提交该有效值,您将如何处理该值

如果您不检查登录用户在发出请求时是否被允许访问指定的资源,那么您的应用程序仍然可能被滥用


与执行访问控制检查相比,混淆值的开销有多大?与其说是硬件性能,还不如说是开发人员的心理负担、调试、代码审查。

讨论了一种防止篡改隐藏字段的方法,但无论如何,您应该检查用户是否有权编辑/访问控制器中的实体如果您担心有人篡改隐藏字段,然后您可以将其放入
会话
,然后在post上检查发布的值是否与
会话
值匹配。正如@StephenMuecke所说的,如果您的安全性需要如此严格,那么应该在您的业务逻辑中检查此级别的编辑权限。您不应该依赖客户端的任何类型的混淆或验证。唯一的解决方案是验证当前用户是否拥有编辑发布的实体的所有权限。作为第一个安全步骤,简单且最佳。
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;
}