如何防止用户伪造表单数据
本文关键字:表单 数据 伪造 用户 何防止 | 更新日期: 2023-09-27 18:06:55
我正在开发一个c# MVC应用程序,用户可以将应用程序提交给管理用户进行审查。管理用户可以批准或拒绝应用程序。我的管理员主页呈现了提交的应用程序列表,单击每个应用程序将打开一个处理应用程序的新页面。
我的担忧很简单:由于每个应用程序的"Id"属性是管理"Process application"表单上的隐藏html元素,因此用户可能修改应用程序Id并提交表单(反过来批准/拒绝不适当的应用程序)。我可以通过使用"AppId"的会话对象来解决这个问题,并验证表单发布的AppId与会话AppId相同。
然而(这是真正的问题),如果我设置Session["AppId"] = applicationId,如果用户在提交第一个应用程序之前尝试处理另一个应用程序,那么会话对象很容易被覆盖。也许管理员用户认为自己是一个多任务处理者,打开了两个"进程应用程序"窗口。基本上,第一个会话["AppId"]将被第二个会话覆盖。这会导致回发的问题,因为现在我不能基于Session验证任何东西。
在写这篇文章的时候,我意识到我可以添加控件来防止用户同时处理多个应用程序。有没有别的办法呢?同样值得注意的是,只有管理员用户能够伪造应用程序ID,这是不可能的,因为Web-App旨在帮助管理员用户。真的,我只是在寻找这些场景的最佳实践,而不是担心有人会在我的表单上伪造元素。是我最好的方法实际上存储一个AppId在会话中,并防止管理员处理一个以上的应用程序在同一时间(使会话对象不被覆盖)?看起来是这样,但是我想听听社区的建议。
PS:我意识到这个问题类似于安全的方式来阻止用户伪造表单。然而,我认为最大的区别是我目前允许用户一次处理多个应用程序,这阻止了我使用单个会话对象的"AppId"。
我会从"sanity &"安全"的观点。用户应该只能更改他们应该更改的内容,数据应该在服务器端进行验证,然后您可以忽略所有伪造:-)
我发现最好的方法是在页面加载时检查AppId会话对象。如果存在,则表示用户没有完成对原始应用程序的处理(可以通过各种方式处理该场景)。我将让您决定什么是最好的,但您可能会将用户重定向回处理原始应用程序,并提供适当的警告消息来解释发生了什么)。这是我能想到的使用单个会话对象防止在表单上伪造AppId的唯一方法。