2010-10-28 44 views
1

我遇到了我期望的在web开发中的一个常见问题。我有一个ASP.NET MVC 2.0电子商务网站。我通过视图模型将项目成本传递到产品页面视图 - 此成本可能因用户类型,用户历史记录,购买数量等而异。ASP.NET MVC - 确保数据完整性

我想保证当用户提交表单购买该产品,我原来发送的成本是相同的,即视图模型的成本属性没有改变。对于普通用户来说,这不是问题,但对于恶意的人来说,在途中更改价值是相对简单的,这样我的产品成本就会降低,例如$ 1而不是$ 999。

显然,我可以回到数据库并在表单提交后重新计算成本 - 但这看起来像是一个昂贵的操作,我想知道这是如何正常完成的。我脑海中最明显的解决方案是获取字段的哈希码(或者只是加密值),并将其作为隐藏输入添加到表单中,并确保成本字段的哈希码(或加密值)相同。

有谁能告诉我这是如何定期完成和/或如果我的建议解决方案有问题?

由于提前,

JP

回答

4

它通常通过重新计算在服务器上完成(这是否意味着击中DB与否取决于业务&缓存层在服务器上)。您存储或发送给客户的任何信息都可能被篡改,因此您绝对有权不信任它。您网站的安全性/可靠性值得您付出昂贵的代价!

除此之外:在事物的宏伟计划中,它不可能像您想象的那样昂贵。我建议你担心费用,当它成为一个证明的问题,而不是之前。

+0

谢谢丹!我有点期待这个答案,但我喜欢有一个像StackOverflow这样的地方,我可以问我的“基本”问题! – 2010-11-01 03:19:05

0

总是回到数据库。可用的数量,价格等随时都可能发生变化,并且您希望在结帐之前通知用户他们的商品是否不再可用。