SQL注入攻击及在Java Web应用中的防御方法研究.doc

上传人:gs****r 文档编号:1597127 上传时间:2019-03-07 格式:DOC 页数:5 大小:52.50KB
下载 相关 举报
SQL注入攻击及在Java Web应用中的防御方法研究.doc_第1页
第1页 / 共5页
SQL注入攻击及在Java Web应用中的防御方法研究.doc_第2页
第2页 / 共5页
SQL注入攻击及在Java Web应用中的防御方法研究.doc_第3页
第3页 / 共5页
SQL注入攻击及在Java Web应用中的防御方法研究.doc_第4页
第4页 / 共5页
SQL注入攻击及在Java Web应用中的防御方法研究.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、SQL 注入攻击及在 Java Web 应用中的防御方法研究【摘要】 互联网的高速发展使得网络安全成为各界关注的焦点问题。人们把在电子商务、社交网络等互联网应用中产生的大量重要数据存储于数据库中,而这些数据库便成为网络黑客的攻击目标。目前,SQL注入攻击是网络中最为猖獗的黑客攻击行为之一。本文将详细阐述 SQL注入式攻击的原理,并给出在 Java Web 应用程序中防御 SQL 注入攻击的有效方法。 【关键词】 SQL 注入 网络安全 数据库 Java Web 防御 如今,互联网已经融入现代社会的方方面面,电子商务、社交网络、在线教育(MOOC)已经成为当下人们生活不可或缺的组成。人们在使用这

2、些互联网应用时,会产生大量与自身相关的数据存储在数据库中。由于这些数据的潜在价值(如个人隐私数据、网银账户等) ,使得它们成为网络黑客主要的攻击目标之一。目前,最为常见的、破坏性最强的针对互联网应用数据库系统的攻击方式是 SQL 注入攻击。综合统计资料来看,SQL 注入约占据互联网安全威胁性事件总数的 1/3,且程逐年递增趋势;DB Networks 的统计表明,2014 年 SQL 注入漏洞数量较 2013 年增长104%1。因此,本文将探讨、研究注入技术背后的原理、实施方法和分类,来更好的应对这类攻击;同时结合 Java Web 开发技术,给出在 Java Web 应用程序中防御 SQL

3、注入攻击的有效方法。 一、SQL 注入攻击的原理 SQL 注入攻击(SQL Injection Attack, SQLI) ,是指利用应用程序层与数据库层之间的安全漏洞、通过恶意 SQL 语句攻击这些漏洞来非法获取目标数据的行为。简单来说,精心设计的恶意 SQL 语句会从应用程序前端提交至后台数据库执行,执行过程中应用程序开发者编写的原始SQL 语句会被恶意语句篡改,从而暴露攻击者想要获取的隐私数据。 图 1 描述了一个 B/S 架构应用程序遭受 SQL 注入攻击的基本流程。假设该系统关系型数据库中存储有某单位全体员工的个人信息,提交URL: Web 应用服务器将获取到参数 staff_id

4、=130 98,并在数据库中执行下列 SQL 查询语句: SELECT name, gender, age, salary, address FROM t_staff WHERE staff_id = 13098 ; 数据库将返回员工 ID(staff_id)为 13098 的员工的详细个人详细,如姓名、收入、家庭住址等。如果攻击者想要窃取全部员工的个人信息,针对上述 SQL 查询语句,他可以构造这样一条请求 URL: or 1=1 那么在数据库中将执行下列查询语句: SELECT name, gender, age, salary, address FROM t_staff WHERE s

5、taff_id = 13098 or 1 = 1; 由于 staff_id=13098 or 1 = 1 为永真句,因此该系列语句等效为: SELECT name, gender, age, salary, address 至此,攻击者成功窃取了全部员工的个人信息。 二、Java Web 程序对 SQL 注入攻击的防御方法 尽管 Java Web 技术在设计之初就十分重视安全性,Java Web 技术也是目前最安全的开发技术之一,但在实际开发和应用中,使用 Java Web技术构建的应用仍有可能受到 SQL 注入攻击的破坏。本文将讨论几种在Java Web 应用中防御 SQL 注入攻击的有效方

6、法。 2.1 使用正则表达式过滤参数 从前文论述我们可以看出,SQL 注入攻击的核心在于向数据库服务器提交含有特殊含义的字符,改变原始 SQL 语句的语义。因此,使用正则表达式过滤掉用户提交参数中的特殊字符(如转义字符) ,便能大大降低发生注入攻击的概率。 上述代码中的正则表达式”.*(;+|(-)+).*”可以检测出用户提交参数中的特殊字符(如转义字符单引号) ,将其替换为空格符,防止数据库受到注入攻击。 public static String filterSQLInjection(String param) return param.replaceAll(“.*( ;+|(-)+).*“

7、, “) ; String userName = filterSQLInjection(request. getParameter(userName) ) ; String userPasswd = filterSQLInjection(request. getParameter(userPasswd) ) ; 2.2 使用预编译技术防止 SQL 注入 SQL 注入攻击能够实现的基本前提是程序员使用拼接 SQL 语句的方式编写数据库操作语句,如: String sql = “SELECT * FROM t_admin WHERE user_ name = ” + userName + “ AN

8、D password = ” + userPasswd; ResultSet rs = statement.executeQuery(sql) ; 因此,防御 SQL 注入攻击的最有效方法是禁止使用拼接的方法编写SQL 语句,转而使用预编译技术进行数据库操纵方面的开发。 所谓预编译,指的是将格式结构固定的 SQL 语句编译后,存储在数据库缓存中,当调用该语句时,直接执行缓存中编译后的结果。使用预编译机制可以消除注入攻击的隐患,因为 SQL 语句已经通过编译,传入的参数不会跟其发生任何匹配关系。在 Java 中,通过PreparedStatement 类实现了预编译相关功能,使用方法如下: St

9、ring sql= “SELECT * FROM t_admin WHERE user_ name=? AND password=?“; PreparedStatement psmt=conn.prepareSattement(sql) ; psmt.setString(1, userName) ; psmt.setString(2, userPasswd) ; ResultSet rs = preState.executeQuery() ; 三、结束语 本文结合实例,论述了 SQL 注入攻击的原理和实施过程,讨论了 SQL注入攻击的分类和最新发展;最后,提出了 Java Web 应用程序防御 SQL注入的几种有效方法,具有一定借鉴意义。 参 考 文 献 1 王丽丽, 彭一楠, 王轶骏. 浅析 SQL 盲注攻击的实现J. 信息安全与通信保密, 2008, 05 期(05):71-73.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文资料库 > 毕业论文

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。