Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
C# 直接调用操作时的ASP.NET MVC安全性_C#_Asp.net_Asp.net Mvc_Security_Asp.net Mvc 4 - Fatal编程技术网

C# 直接调用操作时的ASP.NET MVC安全性

C# 直接调用操作时的ASP.NET MVC安全性,c#,asp.net,asp.net-mvc,security,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Security,Asp.net Mvc 4,我有一个名为Account的控制器和一个名为AddFunds()的操作 在我的HttpGet Addfunds()操作中,我将视图绑定返回到具有AccountId属性的ViewModel,因此默认情况下视图包含一个名为AccountId的隐藏字段 在HttpPost AddFunds()操作中,我收到了更新的ViewModel,其AccountID与HttpGet方法传递的AccountID相同,还有一些其他参数,如Amount等 我可以做些什么来防止一个人直接调用传递假AccountId的方法

我有一个名为Account的控制器和一个名为AddFunds()的操作

在我的HttpGet Addfunds()操作中,我将视图绑定返回到具有AccountId属性的ViewModel,因此默认情况下视图包含一个名为AccountId的隐藏字段

HttpPost AddFunds()操作中,我收到了更新的ViewModel,其AccountID与HttpGet方法传递的AccountID相同,还有一些其他参数,如Amount等

我可以做些什么来防止一个人直接调用传递假AccountId的方法

防伪标识能阻止这种情况吗? 我应该采取其他措施吗

作为一个附带问题,是否可以避免在隐藏字段中传递AccountID,或者是否有必要知道我正在处理哪个实体


首先要感谢

您应该避免为数据/ID使用隐藏字段,这些字段将被传递给控制器的操作,并表示一些真实的、可能重要的数据

如果您关心的是有可能操纵ID的用户,您应该引入非确定性ID(如GUID)


防伪令牌用于防止执行CSRF攻击。

当您将值传递给post操作时,可以加密Id,并在post方法中根据需要解密该Id

您的url将是:localhost:3040/home/edit?AccountId=hkdshjlk89890-32(encryptedid)

或者您可以使用base64编码和解码(我不建议使用base64,因为每个人都对值进行解码)

其他解决方案您可以看到下面的链接

只需发布代码,而不必描述代码。简短的回答是,在允许任何更改之前,您需要将传递的AccountID与经过身份验证的用户的AccountID进行比较。然而,这是一个相当大的主题,您应该仔细阅读asp.net mvc应用程序的安全性工作原理。Hi@Kamo有一个好的开始,隐藏字段中的Id默认由scaffolding功能创建。你如何避免这种情况?我们有哪些选项?@IGIT您必须提供有关此功能的更多详细信息。