Sql server之sql注入篇
作者:网络转载 发布时间:[ 2015/4/16 14:52:15 ] 推荐标签:数据库 SQL注入
用于目录扩展存储过程的名称的开头,如 xp_cmdshell。
注:验证输入是被常用和联想到的,但是个人感觉这种方式不但代码显得肥胖,而且效率不是很好
2.使用类型安全的 SQL 参数
SQL Server 中的 Parameters 集合提供了类型检查和长度验证。如果使用 Parameters 集合,则输入将被视为文字值而不是可执行代码。使用 Parameters 集合的另一个好处是可以强制执行类型和长度检查。范围以外的值将触发异常。以下代码段显示了如何使用 Parameters 集合:
1 SqlDataAdapter myCommand = new SqlDataAdapter("AuthorLogin", conn);
2 myCommand.SelectCommand.CommandType = CommandType.StoredProcedure;
3 SqlParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",
4 SqlDbType.VarChar, 11);
5 parm.Value = Login.Text;
在此示例中,@au_id 参数被视为文字值而不是可执行代码。将对此值进行类型和长度检查。如果 @au_id 值不符合指定的类型和长度约束,则将引发异常。
存储过程如果使用未筛选的输入,则可能容易受 SQL Injection 攻击。例如,以下代码容易受到攻击:
SqlDataAdapter myCommand = new SqlDataAdapter("LoginStoredProcedure '" + Login.Text + "'", conn);
如果使用存储过程,则应使用参数作为存储过程的输入。
注:在鄙人现在的项目中,这种方法应用为广泛
3.在动态 SQL 中使用参数集合
如果不能使用存储过程,您仍可使用参数,如以下代码示例所示:
1 SqlDataAdapter myCommand = new SqlDataAdapter(
2 "SELECT au_lname, au_fname FROM Authors WHERE au_id = @au_id", conn);
3 SQLParameter parm = myCommand.SelectCommand.Parameters.Add("@au_id",
4 SqlDbType.VarChar, 11);
5 Parm.Value = Login.Text;
注:和第二种雷同,这种方法是为了补充方法2存在,因为往往在很多时候业务简单不需要用proc的时候,可以用这种方法
4.筛选输入
筛选输入可以删除转义符,这也可能有助于防止 SQL 注入。但由于可引起问题的字符数量很大,因此这并不是一种可靠的防护方法。以下示例可搜索字符串分隔符。
1 private string SafeSqlLiteral(string inputSQL)
2 {
3 return inputSQL.Replace("'", "''");
4 }
注:Filtering Input有种类似方法1
5.LIKE 子句
请注意,如果要使用 LIKE 子句,还必须对通配符字符进行转义:
1
2 s = s.Replace("[", "[[]");
3 s = s.Replace("%", "[%]");
4 s = s.Replace("_", "[_]");
注:针对like子句,在使用时的效率这里不多说了,总之要慎用了。
以上所有方法及其注释高亮显示部分,均为本人愚见,如果对方法有补充或者对高亮部分有不同意见的,欢迎大家给出意见,共同进步.
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
在测试数据库性能时,需要注意哪些方面的内容?测试管理工具TC数据库报错的原因有哪些?怎么解决?数据库的三大范式以及五大约束编程常用的几种时间戳转换(java .net 数据库)优化mysql数据库的几个步骤数据库并行读取和写入之Python实现深入理解数据库(DB2)缓冲池(BufferPool)国内三大云数据库测试对比预警即预防:6大常见数据库安全漏洞数据库规划、设计与管理数据库-事务的概念SQL Server修改数据库物理文件存在位置使用PHP与SQL搭建可搜索的加密数据库用Python写一个NoSQL数据库详述 SQL 中的数据库操作详述 SQL 中的数据库操作Java面试准备:数据库MySQL性能优化
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南