【问题标题】:Storing table and column names in html在 html 中存储表名和列名
【发布时间】:2018-01-21 13:25:12
【问题描述】:

我目前正在开发一个将许多输入字段输出到页面的系统。为了跟踪值需要在数据库中存储的位置,HTML 看起来像这样:

<input id="foobar" data-table="foo" data-column="bar" />

然后,jQuery 使用 .data('table').data('column') 作为参数,通过服务器端将值定向到相关的表/列。


问:即使所有内容都在服务器端正确转义等,这是否存在安全风险?在 html 中暴露表名和列名是否会使页面更容易受到攻击?

【问题讨论】:

    标签: jquery html mysql


    【解决方案1】:

    这是关于这个主题的精彩讨论: https://security.stackexchange.com/questions/109961/exposing-database-fields-names-in-html

    一句话:

    这样做很常见。如您所见,有一个 保持代码简单的显着好处。

    如果您确实存在 SQL 注入漏洞,攻击者可以推测 使用 INFORMATION_SCHEMA 列出您的数据库结构。所以隐藏你的 数据库结构对你帮助不大。

    这方面的另一个问题是批量分配漏洞。 也许允许用户更新他们的用户详细信息 - 姓名、电子邮件、 密码等。但他们不应该能够更新 字段“is_admin”。使用自动将表单字段路由到的代码 SQL语句,有时会出现这样的漏洞。

    因此,虽然这可能会移除顶部的一小部分安全层(通过向潜在的攻击者展示攻击面的一部分),但只要您的应用程序的其余部分是妥善保护。

    【讨论】:

    • 只有当 SQL 注入漏洞允许攻击者检索数据时,INFORMATION_SCHEMA 注释才是正确的。有时这是一种单向注入,我只是发送原始/随机字符串,试图找出允许“更新”工作的列名。呃,我的意思是,攻击者......
    【解决方案2】:

    安全风险可能意味着很多事情。至于 SQL 注入,如果您正确地转义所有内容(或使用参数化查询),应该没问题。

    如果您认为知道您的数据库架构的某些细节的人存在安全风险,那么是的,确实如此。例如,如果有人在您的应用中发现另一个易受攻击的地方,现在他们可以更准确地确定架构并进行攻击,而不仅仅是猜测表名。

    如果您非常确定一切都是安全的,那可能没什么大不了的(但我们真的知道吗?...)

    tl;博士;也许……也许不是……也许没什么大不了的

    【讨论】:

      【解决方案3】:

      在 html 中使用表名和列名可以让任何人从页面源中看到。为什么你让其他人看到表和列名。应该避免。

      【讨论】:

        猜你喜欢
        • 2018-10-04
        • 2013-02-09
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-05
        相关资源
        最近更新 更多