完整性检查 - 连接日期值 - SQL注入

时间:2010-04-12 11:39:43

标签: tsql datetime sql-injection concatenation

我们目前收到的值参数为VARCHAR,然后从中构建日期。我想确认下面的方法将从这个语句中停止SQL注入的可能性:

select CONVERT(datetime, '2010' + '-' + '02' + '-' + '21' + ' ' + '15:11:38.990')

另一个注意事项是,传递给存储过程的实际参数是(4, 2, 2, 10, 12) VARCHAR的长度限制,与上述相对应。

2 个答案:

答案 0 :(得分:1)

如果您在存储过程中使用这样的语句:

select CONVERT(datetime, @Year + '-' + @Month + '-' + @Day+ ' ' + @Time)

然后你应该没问题,因为目标数据类型datetime只会收到有效的日期字符串。

如果您在存储过程中使用它:

EXEC ('select CONVERT(datetime, @Year+''-''+@Month+''-''+@Day+'' ''+ @Time)')

你可能有一个问题,不太可能,因为输入字符串的长度有限,但谁知道黑客会想到什么才能适应那个小空间。

答案 1 :(得分:0)

如果该语句是存储过程,则无论如何都不会遭受SQL注入

如果该语句是用语言生成的 - 例如php - 那么只需确保你在路上转义字符串(用'for'代替mysql或''代替mssql)以避免注入攻击。