- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——解决系统中可能存在的SQL注入式攻击的安全性问题
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上
银行账户管理系统》——解决系统中可能存在的SQL注入式攻击的
安全性问题
1.1.1 对系统中可能存在的SQL注入式攻击的安全性防患
1、SQL 注入式攻击概述
(1)SQL 注入式攻击
SQL 注入式攻击是将其他的(恶意的)SQL 代码传递到某个应用程序中的行为,该代码通常被附加到该应用程序包含的合法 SQL 代码中。如果查询语句是select * from userInfo where userName='"+userName+"' and passWord='"+userPassWord+"'" 。
如果用户名是:admin,而密码为 1' or '1'='1。那么查询语句将会变成:
select * from userInfo where userName ='admin' or '1'='1' and passWord ='1' or '1'='1' 。这样查询语句就通过了,从而就可以进入到系统的管理界面。
所有 SQL 数据库都在不同程度上容易遭受 SQL 注入式攻击,下面主要以 SQL Server 数据库作为示例数据库来说明上述问题。
用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection(即SQL注入)。
(2)出现的场合
1)当处理作为 SQL 命令组成部分的用户输入时,应当特别注意可能发生的 SQL 注入式攻击。如果系统的身份验证是使用表单身份验证方式,则必须防止 SQL 注入式攻击。下面的语句存在注入攻击漏洞:
ResultSet rs=stam.executeQuery("select * from userInfo where userName='" +
杨教授大学堂,版权所有,盗版必究。 1/11页
杨教授大学堂 精心创作的优秀程序员 职业提升必读系列资料
userName + "' and passWord='"+ userPassWord + "'"); 如果对这样的SQL语句,采用下面的方式:
select * from userInfo where userName ='' or'x'='x' or 'x'='' and password='1'
则会出现注入攻击漏洞。
2)如果使用未筛选的用户输入来构建 SQL语句的字符串,则也有可能会遭受到恶意用户输入的攻击。因为恶意用户可以利用转义符将 SQL 命令附加到SQL语句中。例如,下面的两个代码片段都容易遭受攻击。
, 使用未筛选的用户输入来构建 SQL 语句
Select * FROM userInfo where userID ='" + authorID + "'"
, 通过构建单个字符串来调用存储过程,该字符串包含未筛选的用户输入
userInfoStoredProcedure(" + authorID + ")
(3)SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别
所以目前市面的防火墙都不会对SQL注入发出警报,如果管理员没查看系统日志的习惯,可能被入侵很长时间都不会发觉。
2、SQL 脚本注入式攻击的剖析
当在应用程序中接受未筛选的用户输入值(见上文)时,恶意用户可以使用转义符来添加他们自己的命令。
试考虑这样一个 SQL 查询,该查询希望用户输入一个用户的ID号码的查询形式如下所示:
select * from userInfo where userID =
恶意用户可以将以下文字输入我们的应用程序输入字段(例如Form表单中的文本框控件)中。
';insert into userInfo (userID,userName,userPassWord) values
(23456,’zhang’,’1234’) -
此示例中注入了一个 insert语句,并且上述命令生成以下组合 SQL 字符串:
select * from userInfo where userID =’'; insert into userInfo
(userID,userName,userPassWord) values (23456,’zhang’,’1234’) --
在这种情况下,恶意输入开头的 '(单引号)字符中止了SQL 语句中的当前字符串。它仅在以下情况下才关闭当前语句:下面分
文档评论(0)