基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——解决系统中可能存在的SQL注入式攻击的安全性问题.doc

基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——解决系统中可能存在的SQL注入式攻击的安全性问题.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

Byakko + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

认证主体谭**

1亿VIP精品文档

相关文档

相关课程推荐