有任何安全问题允许Pivot中使用撇号SQL列别名吗?

时间:2018-09-22 21:34:17

标签: java sql sql-server security sql-injection

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;] 

1 个答案:

答案 0 :(得分:0)

基于:https://docs.microsoft.com/en-us/sql/t-sql/data-types/constants-transact-sql?view=sql-server-2017https://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'