原文:http://www.cnblogs.com/hantianwei/archive/2009/07/09/1519722.html

SQL语句
利用SqlCommand传参数的方法:
string strSQL="SELECT * FROM [user] WHERE user_id=@id";
SqlCommand cmd = new SqlCommand();
cmd.CommandText = strSQL;
cmd.Parameters.Add("@id",SqlDbType.VarChar,20).Value=Request["id"].ToString();
过滤禁止运行法:
            /// <summary>
            /// 过滤SQL语句,防止注入
            /// </summary>
            /// <param name="strSql"></param>
            /// <returns>0 - 没有注入, 1 - 有注入 </returns>
            public int filterSql(string sSql)
            {
                int srcLen, decLen = 0;
                sSql = sSql.ToLower().Trim();
                srcLen = sSql.Length;
                sSql = sSql.Replace("exec", "");
                sSql = sSql.Replace("delete", "");
                sSql = sSql.Replace("master", "");
                sSql = sSql.Replace("truncate", "");
                sSql = sSql.Replace("declare", "");
                sSql = sSql.Replace("create", "");
                sSql = sSql.Replace("xp_", "no");
                decLen = sSql.Length;
                if (srcLen == decLen) return 0; else return 1;         
            }
存储过程
因为在存储过程中就可以设置变量的类型,所以也无需对数据做任何操作
漏洞演示:
http://xxx.xxx.xxx.xxx/xxx.asp?id=17;DROP TABLE D99_Tmp;CREATE TABLE D99_Tmp(subdirectory VARCHAR(100),depth VARCHAR(100),[file] VARCHAR(100))
禁止后使用SQL 语句中就不能出现“exec, master, delete, truncate, declare, create, xp_”这些字符。
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
SQL注入攻击是非常令人讨厌的安全漏洞,是所有的web开发人员,不管是什么平台,技术,还是数据层,需要确信他们理解和防止的东西。不幸的是,开发人员往往不集中花点时间在这上面,以至他们的应用,更糟糕的是,他们的客户极其容易受到攻击。
Michael Sutton 最近发表了一篇非常发人深省的帖子,讲述在公共网上这问题是多么地普遍。他用Google的Search API建了一个C#的客户端程序,寻找那些易受SQL 注入攻击的网站。其步骤很简单:
寻找那些带查询字符串的网站(例如,查询那些在URL里带有 "的情形带来的疏忽,来提供额外的安全层以避免偶然地引进坏的安全缺陷到你的应用里去。
5) 锁定你的数据库的安全,只给访问数据库的web应用功能所需的最低的权限。如果web应用不需要访问某些表,那么确认它没有访问这些表的权限。如果web应用只需要只读的权限从你的account payables表来生成报表,那么确认你禁止它对此表的 insert/update/delete 的权限。
类别:经验交流-语言 | 浏览(56)     网友评论:1 ztf704 - 2007年04月04日 13:18 -- 获得MS SQL的版本号
execute master..sp_msgetversion
-- 得到硬盘文件信息
-- 参数说明:目录名,目录深度,是否显示文件
execute master..xp_dirtree c:
execute master..xp_dirtree c:,1
execute master..xp_dirtree c:,1,1
-- 列出服务器上安装的所有OLEDB提供的程序
execute master..xp_enum_oledb_providers
-- 列出服务器上安装的所有代码页
execute master..xp_enumcodepages
-- 列出服务器上配置的dsn
execute master..xp_enumdsn
-- 列出sql server错误日志列表,最后更新时间
execute master..xp_enumerrorlogs
-- 列出服务器上所有windows本地组
execute master..xp_enumgroups
-- 检测文件存在性
execute master..xp_fileexist 'c:/a.bak'
declare @flag int
exec master..xp_fileexist 'c:/abc.bak',@flag out
if @flag=1
begin
print 'exist'
end
else
begin
print 'no exist'
end
-- 列出服务器上固定驱动器,以及每个驱动器的可用空间
execute master..xp_fixeddrives

相关文章: