如何保证SQL Server免遭SQL注入攻击?
2008-09-02 09:59:24 来源:WEB开发网exec sel_CustomerData @CustomerName=’Smith’’; truncate table Customer; declare @myV = ’’’
一种更好更安全的解决方式就是把存储过程代码用参数来表示。这让.NET来处理变量的数据净化,这样,任何注入代码都不会执行。
.NET代码从你的前台应用程序中调用v_Input变量。
…
Dim v_Conn As New SqlConnection(p_Connectionstring)
v_Conn.Open()
Dim v_cmd As New SqlCommand
Dim v_Parm As New SqlParameter
v_cmd.Connection = v_Conn
v_cmd.CommandType = CommandType.StoredProcedure
v_cmd.Parameters.Add("@CustomerName", SqlDbType.NVarchar, 255)
v_cmd.Parameters.Item("@CustomerName").Direction = ParameterDirection.Input
v_cmd.Parameters.Item("@CustomerName").Value = v_Input
v_cmd.CommandText = "sel_CustomerData"
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()
如果网站的前台应用程序和后台数据库的安全无法正确得到全面的保障,你的系统和数据就很容易受到SQL注入攻击。这些攻击可能表面看上去没有造成什么影响,但如果把你的所有客户数据暴漏给攻击者,问题就大了。破坏程度可以导致所有的数据被删除,或者你的网站和应用程度被用来向客户发送病毒。短期而言,这会让客户的电脑受到感染。长远来看,你的公司可能会列入不安全站点名单。
注:本文中的.NET代码仅作参考之用,未经测试,或保证可行。我是一名DBA,不是一名.NET开发人员,所以,提供此代码时为了介绍基本的概念,而不是作为生产的用途。
作者简介:Denny Cherry具有十多年管理SQL Server的经验,包括MySpace.com网站近两亿用户的安装。Denny的专长领域包括系统架构、性能调优、复制和疑难解答。他是Awareness科技公司的高级数据库管理员和架构师。Denny是SQL Server专业协会(PASS)以及SQL Server专家Quest Software协会的终身会员,在SQL Server管理方面发表了无数技术文章。
更多精彩
赞助商链接