像Select t.value as [silly ' name %'] from Test_Table t
这样的地方,[silly ' name%']
来自用户输入是一种安全威胁吗?
我正在处理的项目允许用户通过sql pivot
重新排列数据,使输入值成为列。现在,我们“转义”列名,双引号括住任何单个的滴答,这将导致查询失败,因为它与表中的实际文本不匹配。 not 转义有什么问题吗?
我一直在测试简单的SQL注入作为列名,这似乎不是问题。
编辑,我们确实将方括号括在方括号中,因此输入
silly] from Test_Table t; drop table Test_Table;
将成为
select [silly]] from Test_Table t; drop table Test_Table;]
答案 0 :(得分:0)
基于:https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql?view=sql-server-2017 和https://docs.microsoft.com/en-us/sql/t-sql/statements/set-quoted-identifier-transact-sql?view=sql-server-2017我的看法是,只要您以以下格式提供列名:
SELECT 1 AS 'Some Name'
并请记住转义单引号(将其加倍),应该很安全。
示例:
SELECT 1 AS 'The level for job_id: %d should be between %d and %d.'
SELECT 1 AS 'silly] from Test_Table t; drop table Test_Table; --'
SELECT 1 AS ']][["'
SELECT 1 AS '''; SELECT 1 --'
SELECT 1 AS 'SELECT 1 / 0'