存储过程之外:SQL注入深入防御
日期:2007年9月18日 作者: 查看:[大字体 中字体 小字体]-
几年以前,对开发者提及”SQL注入”或者要求采取一个”深入防御”的措施,你大概会遭白眼。如今,越来越多的人听过”SQL注入”攻击而且开始关注这些攻击出现带来的潜在危险,但是大多数开发者仍然欠缺如何防止SQL注入攻击的知识,而当问及他们的应用软件如何防御SQL注入时,他们通常回答:“很简单,只要使用存储过程”。我们可以预见的是,使用存储过程对于你的防御策略来说是非常好的开端,但是仅此一步却不够。你需要采用一个深入防御策略。
如果你不熟悉SQL注入攻击和它们对你的应用软件的潜在危险,请参考MSDN的文章 “SQLInjection” (http://msdn2.microsoft.com/en-us/library/ms161953.aspx)。
仅仅依赖存储过程而无法执行一个深入防御的问题在于你真的只指望存储过程开发者为你提供安全。类似于下面SQLServer代码用来鉴别一个用户的存储过程非常常见:
ALTER PROCEDURE LoginUser ( @UserID [nvarchar](12), @PassWord [nvarchar](12) ) AS SELECT * FROM Users WHERE UserID = @UserID AND Password = @Password RETURN 这个存储过程看起来非常安全,但是考虑一下这个:
ALTER PROCEDURE LoginUser ( @UserID [nvarchar](12), @Password [nvarchar](12) ) AS EXECUTE (‘SELECT * FROM Users WHERE UserID = ‘’’ + @UserID + ‘’’ AND Password = ‘’’ + @Password + ‘’’’) RETURN 通过创建一个特别的SQL声明,而且把它放到存储过程代码的EXECUTE函数中,我们真的可以生成一个存储过程SQL注入。当你使用控制代码来写存储过程的时候,这个更加容易,它在Microsoft SQL Server 2005中以新的方式支持:
[Microsoft.SqlServer.Server.SqlProcedure] public static void LoginUser(SqlString userId, SqlString password) { using (SqlConnection conn = new SqlConnection(“context connection=true”)) { SqlCommand selectUserCommand = new SqlCommand(); selectUserCommand.CommandText = “SELECT * FROM Users WHERE UserID = ‘” + userId.Value + “’ AND Password = ‘” + password.Value + “’”; selectUserCommand.Connection = conn; conn.Open(); SqlDataReader reader = selectUserCommand.ExecuteReader(); SqlContext.Pipe.Send(reader); reader.Close(); conn.Close(); } } 甚至就算你是写存储过程的那个人,你通常不能确定其他人会在你后面在应用软件配置以后改变代码。关于Web应用这尤其可能,而这也是为什么一个需要一个深入防御策略。
明显地,这个问题的解决是采用一个深入防御策略。你应该继续使用存储过程和参数化任何有必要的查询,但是你也应该设法建立你的深入防御策略来保证传给这些存储过程的的参数和查询的验证。在我们上面的用户鉴定例子中,“bobsmith”可能是一个有效的用户ID,但是“SELECT * FROM tblCreditCards”或许不是。对于验证用户输入使用你的深入防御策略的一个好的方式是对它采用规范化的表达规则。你能使用在System.Web.UI.WebControls名字空间中的RegularEXPressionValidator控制寻找来验证Web表格数据,而且你可以使用在theSystem.Text.RegularExpressions 名字空间中Regex类寻找来验证任何类别的文字数据。这里有一个Web表格的例子,在把用户输入传递给数据库前对它进行验证。
protected void Page_Load(object sender, EventArgs e) { if (Page.IsPostBack)
- [1] [2] [3] 下一页
- 存储过程之外:SQL注入深入防御 相关文章:
- ·存储过程之外:SQL注入深入防御
- 存储过程之外:SQL注入深入防御 相关软件
下一篇:强烈推荐,MySQL服务维护笔记
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
精品推荐
热点TOP10
- ·精妙SQL语句收集
- ·SQLPLUS命令的使用大全
- ·收集的host文件网站黑名单
- ·数据库连接字符串大全
- ·SQL Server 练习题
- ·SQL中CASE的用法
- ·认识VF--Visual FoxPro 漫谈
- ·什么是SQL注入法攻击
- ·一道褒贬不一的SQL考试题
- ·学习SQL语句之SQL语句大全
- ·SQL Server不存在或访问被拒绝 问题的解决
- ·SQL数据库高级教程:SQL UNION 和 UNION ALL
- ·SQLSERVER中,数据库同步的实现
- ·MS-SQL开发常用汇总和t-sql技巧集锦
- ·MySQL管理工具SQLyog最新6.1下载
- ·“SQL Server不存在或访问被拒绝”问题的解决
- ·学习SQL SERVER的存储过程-之一认识存储过程语法
- ·如何删除数据库中的冗余数据(翻译)
- ·数据库物理设计经验谈
- ·MySQL数据库学习手册之MySQL客户工具和API
特别推荐
- ·什么是SQL注入法攻击
- ·用SQL语句删除重复记录的四种方法
- ·数据库查询优化
- ·MySQL常见错误问答!
- ·MySQL从后门进企业市场
- ·精妙SQL语句收集
- ·如何在WinNT/2K/XP下启动纯DOS
- ·自己动手做一个SQL解释器
- ·SQL SERVER实用技巧
- ·动态创建MSSQL数据库表存储过程
- ·数据库的分页问题
- ·DM分区软件使用详解
- ·对ADSL接入方式铜缆可用线对率分析
- ·收集的host文件网站黑名单
- ·修复SQL Server 2000数据库之实战经验
- ·实用的存储过程之一
- ·IIS5 ISAPI Extension Back Door
- ·MySQL中文参考手册7(MySQL存取权限系统)grant设置密码password
- ·Sql server 如何得到汉字的声母
- ·数据库物理设计经验谈
