【问题标题】:Risks to database and front-end coupling数据库和前端耦合的风险
【发布时间】:2014-09-22 03:41:46
【问题描述】:

我想不出更好的标题,阅读问题后您可以提出更好的标题。你也可以推荐一些更好的标签,我找不到web-development

我是一名学生,所以我不知道实现以下问题的标准方法。

我通常根据数据库主键设置元素的ID(div、span、tr等),方便以后引用。

例如,在页面上有一些条目的 id 设置为数据库中的主键 sno,然后单击任何行检查 id 并使用该 id 显示来自数据库的结果。

但我认为这是个坏主意,因为任何人都可以使用 Inspect ElementDev Tools 并更改 ID。

实现这一目标的标准方法是什么?

编辑 1
我知道web browser wont enforce the security policy for me 这就是为什么我要求使用标准方式或标准做法来解决这个问题。

【问题讨论】:

  • 不要指望 Web 浏览器强制执行您的安全策略 - 解决中间件或数据层中这些问题的正确位置。假设有恶意用户能够制作您的服务器能够响应的任何 HTTP 请求(有,而且他们会)。
  • 也就是说,如果您需要在文档和数据元素之间进行深度集成,请考虑在浏览器端创建数据层并使用普通的 javascript 属性映射到视图。否则,使用文档 ID 就可以了。
  • @BadZen 抱歉,我不知道 creating a data layer on the browser side 你是否知道一些博客、wiki 或任何我可以进一步了解它的网站?
  • 如果您想要一个更具体的标题主题(因为通用性在 SO 上不受欢迎),您的帖子是关于您的数据库和前端可以有多接近。因此,您可以重命名为“数据库和前端耦合的风险”
  • @BadZen 所说的浏览器端的数据层 可能意味着什么,是用一些 Javascript 真正维护浏览器中的数据层。因此,您可以从 HTML 元素中抽象出 ID,并将其移至 Javascript。但即便如此,攻击者也可以继续使用 Javascript。因此,验证 ID 是否正确和有效的最佳位置是在后端(如 BadZen 所示的中间件或数据层)。如果您有前端与之通信的 Web 服务,您可以在那里对其进行验证,并在未经授权的资源访问时返回错误响应。

标签: servlets web frontend backend coupling


【解决方案1】:

无论如何,您必须假设到达后端的任何请求都可能是伪造的,发送到浏览器的任何数据(可见或隐藏)都是公开的

如果您认为id 是私有的(相当不常见的要求),您可以改为简单地使用行顺序并在服务器会话中保持一个表row_order id

如果你只是想确保id正确,在更新数据库之前控制它们(服务器端),或者如果你之前无法控制它们,则在数据库写入时控制它们。

如果您想强制执行任何其他策略(用户具有角色并且根据角色是否允许更新某些值),所有这些控制都必须在服务器端完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-10
    • 2021-01-11
    • 2017-07-26
    • 2018-07-26
    • 1970-01-01
    • 2021-02-10
    相关资源
    最近更新 更多