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

时间:2015-10-03 15:14:10

标签: c# asp.net asp.net-mvc security asp.net-mvc-4

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

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

HttpPost AddFunds()操作中,我收到了更新的ViewModel,其中包含与HttpGet方法相同的AccountID,以及其他一些参数,例如Amount等。

我该怎么做才能防止一个人直接调用该方法传递假的AccountId?

AntiForgery令牌会阻止这种情况吗? 我应该采取其他措施吗?

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

由于

2 个答案:

答案 0 :(得分:0)

首先 - 你应该真的避免使用数据/ ID的隐藏字段,这些字段即将传递给控制器​​的操作并代表一些真实的和可能重要的数据。

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

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

答案 1 :(得分:0)

您可以在将值传递给post post时加密Id,并在post方法中解密该id,无论它在何处需要。

你的网址是:localhost:3040 / home / edit?AccountId = hkdshjlk89890-32(encryptedid)

或者您可以使用base64编码和解码(我不推荐使用base64,因为每个人都会解码该值)。

其他解决方案您可以看到以下链接 Only allow access to action if redirected from specific action