WEB开发网
开发学院数据库MSSQL Server 如何保证SQL Server免遭SQL注入攻击? 阅读

如何保证SQL Server免遭SQL注入攻击?

 2008-09-02 09:59:24 来源:WEB开发网   
核心提示: 应用程序与数据库最简单配合使用的方法就是在应用程序内动态生成SQL命令,下面的示例中,如何保证SQL Server免遭SQL注入攻击?(3),.NET代码从前台应用程序中调用(populate)v_Input变量:…Dim v_Conn As New SqlConnectio

应用程序与数据库最简单配合使用的方法就是在应用程序内动态生成SQL命令。下面的示例中,.NET代码从前台应用程序中调用(populate)v_Input变量:

 …
  Dim v_Conn As New SqlConnection(p_Connectionstring)
  v_Conn.Open()
  Dim v_cmd As New SqlCommand
  v_cmd.Connection = v_Conn
  v_cmd.CommandType = CommandType.Text
  v_cmd.CommandText = "exec sel_CustomerData @CustomerName=’" & v_Input & "’"
  Dim v_DR As SqlDataReader
  v_DR = v_cmd.executeReader
  v_DR.Close()
  v_DR = Nothing
  v_cmd.Dispose()
  v_cmd = Nothing
  v_Conn.Close()
  v_Conn = Nothing
  v_DR.Close()

如果你不在v_Input变量中对数据进行验证,就相当于为SQL注入攻击敞开大门。如果你对输入不进行验证,就会允许攻击者传入一个单引号和一个分号,这样,将告诉SQL Server结束当前的语句,转而执行另一段sql语句pass in a single quote, and a semicolon, which tells the SQL Server to end the value and the statement moving on to the next statement in the batch。例如像这样的值“Smith ’; truncate table Customer; declare @myV =”。通过SQL Server执行的SQL语句会变成:The resulting SQL statement executed against the SQL Server

exec sel_CustomerData @CustomerName=’Smith’; truncate table Customer; declare @myV = ’’

当应用程序(calling application runs the code)运行这段代码的时候,将运行存储过程,然后表被清空。你需要进行一些基本的验证,将变量中的任何单引号替换为两个单引号。这样,就可以中止SQL Server运行删除语句truncated statement,因为现在它是值的一部分。通过这样的简单变化,我们的数据库调用现在就会像这样:

上一页  1 2 3 4  下一页

Tags:如何 保证 SQL

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接