《关于JSP防范SQL注入攻击WEB安全电脑资料.pdf》由会员分享,可在线阅读,更多相关《关于JSP防范SQL注入攻击WEB安全电脑资料.pdf(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!关于 JSP 防范 SQL 注入攻击 WEB 安全-电脑资料 上周给别人做了个网站,无意间发现自己的作品有很多漏洞,在短短的20 秒就被自己用 sql 注入法给干了.查了一点关于 sql 注入的资料,并且有点感悟,希望能与新手们分享一下.高手们见笑了!SQL 注入攻击的总体思路:发现 SQL 注入位置;判断服务器类型和后台数据库类型;确定可执行情况 对于有些攻击者而言,一般会采取 sql 注入法.下面我也谈一下自己关于sql 注入法的感悟.注入法:从理论上说,认证网页中会有型如:select*from
2、 admin where username=XXX and password=YYY 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施 SQL 注入.如在用户名文本框内输入:abc or 1=1-在密码框内输入:123 则SQL 语句变成:select*from admin where username=abc or 1=1 and password=123 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份.猜解法:基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条
3、记录内容.还有一种方式可以获得你的数据库名和每张表的名.欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!就是通过在形如:/news?id=10的方式来通过报错获得你的数据库名和表名!对于 jsp 而言我们一般采取一下策略来应对:1、PreparedStatement 如果你已经是稍有水平开发者,你就应该始终以 PreparedStatement 代替 Statement.以下是几点原因 1、代码的可读性和可维护性.2、PreparedStatement 尽最大可能提高性能.3、最重要的一点是极大地提高了安全性.到目前为止,有一些人(包括本人)连基本
4、的恶义 SQL 语法都不知道.String sql=select*from tb_name where name=varname and passwd=varpasswd;如果我们把 or 1=1作为 name 传入进来.密码随意,看看会成为什么?select*from tb_name=or 1=1 and passwd=随意;1=1肯定成立,可以任何通过验证.更有甚者:把;drop table tb_name;作为 varpasswd 传入进来,则:select*from tb_name=随意 and passwd=;drop table tb_name;有些数据库是不会让你成功的,但也有很
5、多数据库就可以使这些语句得到执行.而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编译了,只有少数的桌面数据库,就是直接文件访问的那些只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的 statement,有可能要对 drop,;等做费尽心机的判断和过虑.2、正则表达式 2.1、检测 SQL meta-characters 的正则表达式/()|()|(-)|(#)|(#)/ix 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!2.2
6、、修正检测 SQL meta-characters 的正则表达式/(=)|(=)n*()|()|(-)|(;)|(:)/i 2.3、典型的 SQL 注入攻击的正则表达式/w*()|()(o)|o|(O)(r)|r|(R)/ix 2.4、检测 SQL 注入,UNION 查询关键字的正则表达式/()|()union/ix()|()-单 引号和它的 hex 等值 union-union 关键字.2.5、检测 MS SQL Server SQL 注入攻击的正则表达式/exec(s|)(s|x)pw/ix 3、字符串过滤 public static String filterContent(String
7、 content)String flt=|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|,;Stringfilter=flt.split(|);for(int i=0;i content.replace(filteri,);return content;4、不安全字符屏蔽 本部分采用 js 来屏蔽,起的作用很小,这样用屏蔽关键字的方法虽然有一定作用,但是在实际应用中这些 SQL 的关键字也可能成为真正的查询关键字,到欢迎您阅读并下载本文档,本文档来源于互联网,
8、如有侵权请联系删除!我们将竭诚为您提供优质的文档!那是被你屏蔽了那用户不是不能正常的使用了.只要在代码规范上下点功夫就可以了.凡涉及到执行的 SQL 中有变量时,用 JDBC(或者其他数据持久层)提供的如:PreparedStatement 就可以,切记不要用拼接字符串的方法就可以了.功能介绍:检查是否含有,/参数说明:要检查的字符串 返回值:0:是 1:不是 函数名是 function check(a)return 1;fibdn=new Array(,/);i=fibdn.length;j=a.length;for(ii=0;ii for(jj=0;jj temp1=a.charAt(jj);temp2=fibdnii;if(tem;p1=temp2)return 0;return 1;