【问题标题】:Where do I prevent users from accessing other users' data?我在哪里可以防止用户访问其他用户的数据?
【发布时间】:2010-07-14 14:19:46
【问题描述】:

在我正在构建的网站上,我需要允许用户编辑他们的订单。很容易。但是如何确保一个用户不能编辑其他用户的订单呢?我是否在模型或控制器中执行检查以验证订单是否属于经过身份验证的用户?

【问题讨论】:

  • 我不认为这表明无知的危险程度。他已经知道通过验证经过身份验证的用户来保护站点,这对我来说似乎更像是一个编码风格和 MVC 架构问题。标题有点误导。

标签: model-view-controller access-control


【解决方案1】:

在视图(是的,视图)中进行检查,以便快速响应用户错误。

在控制器中进行检查以确保数据完整性。

例如,在基于 Web 的应用程序中,您可能有浏览器 JavaScript 来检查所有字段,包括用户名,因此用户可以快速响应以修复错误交易。但是,回到您的服务器,您不能依赖浏览器来真正验证数据,因为浏览器不在您的控制范围内——它可能被有意或无意地损坏,并且没有按照您的意愿进行验证。因此,您需要重新验证服务器上的所有内容以确保完整性。

【讨论】:

  • 没错,你应该总是先在服务器上做验证、解析等事情。然后,您可以使用 JavaScript 和 AJAX 等客户端技术进行润色。这种方法称为Progressive Enhancement。想象一下使用 JavaScript 依赖浏览器端验证,这很容易被禁用!
【解决方案2】:

希望您的网站不会让用户尝试编辑其他人的订单。但如果仍然可以尝试,您可以将该逻辑放入模型或控制器中。这是一个见仁见智的问题。有人会说,控制器应该做访问检查之类的事情,而模型只知道如何修改自己。其他人会说“胖模型,瘦控制器”,并说安全检查需要跨控制器重复使用,因此它们应该进入模型。这是你的电话。

【讨论】:

    猜你喜欢
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-23
    • 2018-11-06
    • 2020-05-21
    • 1970-01-01
    • 2018-04-27
    相关资源
    最近更新 更多