C# ASP.NET MVC-确保数据完整性

C# ASP.NET MVC-确保数据完整性,c#,asp.net-mvc,C#,Asp.net Mvc,我遇到了web开发中常见的问题。我有一个ASP.NETMVC2.0电子商务网站。我通过viewmodel将项目的成本传递到产品页面视图-此成本可能根据用户类型、用户历史记录、购买数量等而有所不同 我想保证,当用户提交表单购买上述产品时,我最初发送的成本是相同的,即viewmodel中的成本属性没有更改。对于普通用户来说,这不是问题,但对于恶意用户来说,在途中更改值以使我的产品成本相对简单,例如1美元而不是999美元 显然,我可以在提交表单后返回DB重新计算成本——但这似乎是一个昂贵的操作,我想知

我遇到了web开发中常见的问题。我有一个ASP.NETMVC2.0电子商务网站。我通过viewmodel将项目的成本传递到产品页面视图-此成本可能根据用户类型、用户历史记录、购买数量等而有所不同

我想保证,当用户提交表单购买上述产品时,我最初发送的成本是相同的,即viewmodel中的成本属性没有更改。对于普通用户来说,这不是问题,但对于恶意用户来说,在途中更改值以使我的产品成本相对简单,例如1美元而不是999美元

显然,我可以在提交表单后返回DB重新计算成本——但这似乎是一个昂贵的操作,我想知道这通常是如何完成的。在我看来,显而易见的解决方案是获取字段的hashcode(或只是加密值),并将其作为隐藏输入添加到表单中,并确保cost字段的hashcode(或加密值)相同

有人能告诉我这是如何定期进行的和/或我提出的解决方案是否存在问题吗

提前感谢,


JP

通常通过在服务器上重新计算来完成(这是否意味着命中数据库取决于您的业务和服务器上的缓存层)。您存储在客户机上或发送给客户机的任何内容都可能被篡改,因此您完全可以不信任它。你的网站的安全性/可靠性值得这么昂贵的操作


除此之外:从总体上看,它不可能像你想象的那样昂贵。我建议您在它成为一个经验证的问题时,而不是之前,担心费用。

通常通过在服务器上重新计算来完成(这是否意味着命中数据库取决于您的业务和服务器上的缓存层)。您存储在客户机上或发送给客户机的任何内容都可能被篡改,因此您完全可以不信任它。你的网站的安全性/可靠性值得这么昂贵的操作


除此之外:从总体上看,它不可能像你想象的那样昂贵。我建议您在费用问题得到证实后再考虑,而不是在这之前。

始终回到数据库。可用数量、价格等可以随时更改,如果用户要求的商品不再可用,您希望在结账前通知用户。

始终返回数据库。可用数量、价格等可以随时更改,如果用户要求的商品不再可用,您需要在结账前通知用户。

谢谢Dan!我有点期待这个答案,但我喜欢像StackOverflow这样的地方,在那里我可以问我的“基本”问题!谢谢你,丹!我有点期待这个答案,但我喜欢像StackOverflow这样的地方,在那里我可以问我的“基本”问题!