我目前正在开发一个向页面输出许多输入字段的系统。为了跟踪值需要存储在数据库中的位置,HTML看起来像这样:
<input id="foobar" data-table="foo" data-column="bar" />
然后jQuery使用.data('table')
和.data('column')
作为参数传递给服务器端,以将值定向到相关的表/列。
问:即使服务器端的所有内容都已正确转义,这是否存在安全隐患?是否在html中公开了表名和列名,使页面更容易受到攻击?
答案 0 :(得分:2)
安全风险可能意味着很多事情。就SQL注入而言,如果您正确地转义所有内容(或使用参数化查询),它应该没问题。
如果您认为人们知道您的数据库架构的某些细节存在安全风险,那么是的,确实如此。例如,如果有人在您的应用中找到了另一个易受攻击的地方,那么现在他们可以更精确地确定架构和攻击,而不仅仅是猜测表名。
如果你确定一切都是安全的,那可能不是什么大问题(但我们真的知道吗?......)
TL;博士;也许......也许不是......可能不是什么大不了的事。
答案 1 :(得分:1)
以下是关于此主题的优秀讨论: https://security.stackexchange.com/questions/109961/exposing-database-fields-names-in-html
一句话:
这样做很常见。正如你所注意到的,有一个 保持代码简单的重要好处。
如果您确实有SQL注入漏洞,攻击者可以解决 使用INFORMATION_SCHEMA输出数据库结构。所以隐藏你的 数据库结构对你没有多大帮助。
该领域的另一个问题是质量分配漏洞。 也许允许用户更新其用户详细信息 - 姓名,电子邮件, 密码等。但他们不应该能够更新 字段“is_admin”。使用自动将表单字段路由到的代码 SQL语句,有时会出现这样的漏洞。
因此虽然这可能会删除顶部的一小部分安全层(通过向潜在的攻击者提供攻击面的一部分),但只要你的应用程序的其余部分是妥善保管。
答案 2 :(得分:0)
在html中使用表和列名称可以让任何人从页面源中看到。为什么你让其他人看到表和列名。应该避免。