我们目前收到的值参数为VARCHAR
,然后从中构建日期。我想确认下面的方法将从这个语句中停止SQL注入的可能性:
select CONVERT(datetime, '2010' + '-' + '02' + '-' + '21' + ' ' + '15:11:38.990')
另一个注意事项是,传递给存储过程的实际参数是(4, 2, 2, 10, 12) VARCHAR
的长度限制,与上述相对应。
答案 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)以避免注入攻击。