根据服务器生成的数据验证用户输入

时间:2017-02-01 14:37:19

标签: asp.net asp.net-mvc security model-view-controller asp.net-core-mvc

我目前正在使用asp.net MVC创建一个应用程序,我需要验证用户是否在他预先生成的内容中选择了值。

简单流程示例:

- 服务器生成一组值:{10%,20%,30%,40%,50%} - 视图显示包含为该用户生成的值的下拉列表 - 用户必须只选择一个预先生成的值

考虑到用户可以修改html并在下拉列表中放置一个随机值 - 例如80%。我如何限制/阻止这种行为?

我目前正在考虑使用MemoryCache存储允许值集并使用用户ID作为键。不知道是否是最好的解决方案。任何建议都将非常感谢。

2 个答案:

答案 0 :(得分:1)

这是一个有趣的问题。 MemoryCache是一个糟糕的选择。你放在那里什么都没有保证甚至可以在那里,更不用说留在任何可靠的时间。这一切都取决于服务器上发生了什么。如果某个进程需要更多内存,MemoryCache将是第一件事。如果应用程序池回收,崩溃,服务器重新启动等,MemoryCache中的任何内容都将消失。而且,如果您使用多个工作人员(Web场),则MemoryCache之间不会共享Session,从而导致数据可能可用或不可用的奇怪问题,具体取决于用户每次请求所依赖的工作人员。< / p>

MemoryCache可能是尽可能简单地保存值的最佳位置,但您需要确保您的会话存储类似于SQL Server,Redis等。如果您使用In Proc,你会遇到与$ionic io init相同的问题,甚至StateServer也可能是易变的,尽管它至少比In Proc更好。存储在会话中还可确保用户无法修改值。

答案 1 :(得分:0)

解决方案比我想象的要简单。我所做的基本上是:

  1. 生成值(例如:10%,20%,30%,40%,50%)
  2. 散列值并将其放入视图模型
  3. 使用计算哈希
  4. 创建隐藏输入
  5. 散列过帐的值并检查其是否等于先前的散列
  6. 在我的情况下,我使用Compare ValidationAttribute来检查哈希值,因此如果为他生成的值是正确的,用户只能提交表单。