代码之家  ›  专栏  ›  技术社区  ›  Kyle Rosendo

健全性检查-连接日期值-SQL注入

  •  0
  • Kyle Rosendo  · 技术社区  · 15 年前

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

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

    另一个注意事项是,传递给存储过程的实际参数的长度绑定为 (4, 2, 2, 10, 12) VARCHAR 与上述内容一致。

    2 回复  |  直到 15 年前
        1
  •  1
  •   KM.    15 年前

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

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

    那么您就可以了,因为目标数据类型 datetime 将只接收有效的日期字符串。

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

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

    你可能会遇到一个问题,不太可能,因为输入字符串的长度很短,但是谁知道一些黑客会想到什么来适应这个小空间。

        2
  •  0
  •   chris    15 年前

    如果该语句是一个存储过程,那么您无论如何也不会受到SQL注入的影响。

    如果该语句是用一种语言生成的(例如,php),那么只需确保在执行过程中转义字符串(对于MySQL,用\'替换,对于MSSQL,用''替换),以避免注入攻击。