考虑一个假设的银行应用程序,我们有帐户和一些管理员组。每个管理员都拥有某些帐户的修改权限。为了保存对帐户所做的修改,应用程序会在编辑页面上发送帐户ID。管理员可以使用fiddler等工具更改发布请求。如果他/她将帐户ID更改为他/她未获得授权的某个帐户ID。那么检测它的最佳方法是什么。
我应该使用什么策略来重新验证每个数据以便在回发后进行授权?我关心的是设计,而不是代码。
换句话说,现实世界的应用程序如何确保即使用户正在更改任何工具的回发请求,应用程序也能够检测到它。
答案 0 :(得分:1)
我应该在回发后重新验证每一条数据的授权吗?
是的,这是正确的。您应该从“所有输入是邪恶的”哲学开始,然后通过验证每个数据点来证明该语句不正确。如果您的整个数据未通过验证,那么您的输入确实是邪恶的。
智能Web应用程序采用客户端和服务器端验证。客户端验证可以快速提醒用户错误/丢失,而无需进行服务器往返和服务器端验证,以确保错误的数据不会出现问题,即使有人“弄乱”客户端验证码(并覆盖它。)
不幸的是,在客户端加密数据将不起作用,因为您在客户端(在JS代码中)也有密钥。这不会阻止恶意用户加密恶意负载。对于恶意攻击者而言,诸如隐藏字段等的混淆也是低效的。仅供参考,您甚至不需要提琴手更换田地/邮政护栏等 - 您需要的只是firebug extension。
口头禅是“验证服务器端的每一件事”。周期。
答案 1 :(得分:0)
对于像银行业这样的关键应用程序,我将建议采取以下安全措施
1)发送加密帐户ID 2)将该帐户ID保留在隐藏字段中,并且当用户发布数据时,从隐藏字段中获取帐户ID不会形成文本框或标签。 3)重新验证每一条数据,以便在回发后进行授权。