我有一个名为Account的控制器和一个名为AddFunds()的操作
在我的 HttpGet Addfunds()操作中,我将视图绑定返回给具有AccountId属性的ViewModel,因此默认情况下该视图包含一个名为AccountId的隐藏字段。
在 HttpPost AddFunds()操作中,我收到了更新的ViewModel,其中包含与HttpGet方法相同的AccountID,以及其他一些参数,例如Amount等。
我该怎么做才能防止一个人直接调用该方法传递假的AccountId?
AntiForgery令牌会阻止这种情况吗? 我应该采取其他措施吗?
作为一个附带问题,是否可以避免在隐藏字段中传递AccountID,或者是否有必要知道我正在对哪个实体进行操作?
由于
答案 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