允许从 Pivot 使用撇号 SQL 列别名的任何安全问题?



Select t.value as [silly ' name %'] from Test_Table t用户输入[silly ' name%']来自哪里的东西是安全威胁吗?

我正在从事的项目允许用户通过 sql 重新排列数据pivot使输入值成为列。 现在我们"转义"列名,双引号任何单个刻度,这会导致查询失败,因为它与表中的实际文本不匹配。逃避这一点有什么问题吗?

我一直在测试简单的sql注入作为列名,这似乎不是问题。

编辑我们确实将括号括在括号中,以便输入类似

silly] from Test_Table t; drop table Test_Table;

会成为

select [silly]] from Test_Table t; drop table Test_Table;] 

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

相关内容

最新更新