Web十大安全隐患之SQL注入
作者:网络转载 发布时间:[ 2013/12/6 14:13:57 ] 推荐标签:
注入往往是应用程序缺少对输入进行安全性检查所引起的,攻击者把一些包含指令的数据发送给解释器,解释器会把收到的数据转换成指令执行。常见的注入包括SQL注入,OS Shell,LDAP,Xpath,Hibernate等等,而其中SQL注入尤为常见。这种攻击所造成的后果往往很大,一般整个数据库的信息都能被读取或篡改,通过SQL注入,攻击者甚至能够获得更多的包括管理员的权限。
先来说说sql注入漏洞是怎么产生的,或者说对于一个程序开发人员应该怎么防范SQL注入的吧。
SQL注入往往是在编写包含用户输入的动态数据库查询时产生的,但其实防范SQL注入的方法非常简单。程序员只不再写动态查询,或防止用户输入包含能够破坏查询逻辑的恶意SQL语句,能够防范SQL注入。当然,我作为一个测试人员说起来很容易,做起来难了。
我本人只会java,所以后边我用Java代码作为示例:
<font face="宋体" color="#000000">String query ="SELECT account_balance FROM user_data WHERE user_name ="
+ request.getParameter("customerName");
try {
Statement statement =
connection.createStatement( …);
ResultSet results =
Statement.executeQuery(query);
}</font>
|
在以上代码中,我们可以看到并未对变量customerName做验证,customerName的值可以直接附在query语句的后面传送到数据库执行,那么攻击者可以将任意的sql语句注入。
上边说到怎么产生的,我们接着说怎么样才能让sql注入的漏洞避免。本来计划把这一段放在如何测试之后再介绍,但是貌似先介绍出来更方便理解。
防范方法一 :参数化查询
参数化查询是所有开发人员在做数据库查询时首先需要学习的,参数化查询迫使所有开发者首先要定义好所有的SQL代码,然后再将每个参数逐个传入,这种编码风格能够让数据库辨明代码和数据。
参数化查询能够确保攻击者无法改变查询的内容,在下面修正过的例子中,如果攻击者输入了UsrID是“’or ‘1 ‘=’1”,参数化查询会去查找一个完全满足名字为‘or ‘1 ‘=’ 1的用户。
对于不同编程语言,有一些不同的建议:
Java——使用带绑定变量的PreparedStatement();
其他的:。。。不好意思,真不会
示例:
<font face="宋体" color="#000000">String custname = request.getParameter("customerName");
String query ="SELECT account_balance FROM user_data WHERE user_name= ?";
PreparedStatement pstmt = connection.prepareStatement(query);
Pstmt.setString1,custname();
ResultSet results = pstmt.executeQuery();</font>
|
防范方法二:存储过程
存储过程和参数化查询的作用是一样的,的不同在于存储过程是预先定义并存放在数据库中,从而被应用程序调用的。
Java存储过程示例:
String custname = request.getParameter("customerName");
try {
CallableStatement cs = connection.prepareCall("call sp_getAccountBalance(?)}");
cs.setString(1,custname);
Result results = cs.executeQuery();
}catch(SQLException se){
//error handling
}
|
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
什么是Web应用压力测试?常用指标?怎么做?web功能测试的常见检查点Web兼容性测试一般包括哪些方面?Web性能测试需要注意的测试点给你一个网站,你如何来做自动化测试的?Web网站测试流程及方法APP和web埋点的区别是什么?埋点中常提的事件监测是什么?什么是web端性能测试系统的基本性能需求?盘点web端测试和移动端测试的区别有哪些使用AutoRunner录制Web应用程序的脚本Web自动化之Headless Chrome概览Java Web入门必知11个免费的Web安全测试工具Web测试学习总结Web自动化测试原理Java webdriver如何获取浏览器新窗口中的元素?Web应用系统测试
更新发布
功能测试和接口测试的区别
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 使用指南