JSP如何防范SQL注入攻击

丁祖玉

丁祖玉

2016-02-19 17:39

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的JSP如何防范SQL注入攻击,过去的都会过去,迎接崭新的开始,释放更美好的自己。

  上周给别人做了个网站,无意间发现自己的作品有很多漏洞,在短短的20秒就被自己用sql注入法给干了。所以查了一点关于sql注入的资料,并且有点感悟,希望能与新手们分享一下。高手们见笑了!

  SQL注入攻击的总体思路:

  发现SQL注入位置;

  判断服务器类型和后台数据库类型;

  确定可执行情况

  对于有些攻击者而言,一般会采取sql注入法。下面我也谈一下自己关于sql注入法的感悟。

  注入法:

  从理论上说,认证网页中会有型如:

  select * from 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’ 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。

  猜解法:

  基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。

  还有一种方式可以获得你的数据库名和每张表的名。

  就是通过在形如:http://www. .cn/news?id=10'的方式来通过报错获得你的数据库名和表名!

  对于jsp而言我们一般采取一下策略来应对:

  1、PreparedStatement

  如果你已经是稍有水平开发者,你就应该始终以PreparedStatement代替Statement.

  以下是几点原因

  1、代码的可读性和可维护性.

  2、PreparedStatement尽最大可能提高性能.

  3、最重要的一点是极大地提高了安全性.

  到目前为止,有一些人(包括本人)连基本的恶义SQL语法都不知道.

  String sql = "select * from tb_name where name= '"+varname+"' and passwd='"+varpasswd+"'";

  如果我们把[' or '1' = '1]作为name传入进来.密码随意,看看会成为什么? 网管网bitsCN.com

  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; 有些数据库是不会让你成功的,但也有很多数据库就可以使这些语句得到执行.

  而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.(前提是数据库本身支持预编译,但上前可能没有什么服务端数据库不支持编译了,只有少数的桌面数据库,就是直接文件访问的那些只要全使用预编译语句,你就用不着对传入的数据做任何过虑.而如果使用普通的 statement,有可能要对drop,; 等做费尽心机的判断和过虑.

  2、正则表达式

  2.1、检测SQL meta-characters的正则表达式 /(%27)|(')|(--)|(%23)|(#)/ix

  2.2、修正检测SQL meta-characters的正则表达式 /((%3D)|(=))[^n]*((%27)|(')|(--) 54ne.com

  |(%3B)|(:))/i

  2.3、典型的 SQL 注入攻击的正则表达式 /w*((%27)|('))((%6F)|o|(%4F))((%72)|r|( 中国网管联盟www.bitscn.com

  %52))/ix

  2.4、检测SQL注入,UNION查询关键字的正则表达式 /((%27)|('))union/ix(%27)|(') - 单

  引号和它的hex等值  union - union关键字。

  2.5、检测MS SQL Server SQL注入攻击的正则表达式 /exec(s|+)+(s|x)pw+/ix

  3、字符串过滤

public static String filterContent(String 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(filter[i], ""); }return content; }

  4、不安全字符屏蔽

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  本部分采用js来屏蔽,起的作用很小,这样用屏蔽关键字的方法虽然有一定作用,但是在实际应用中这些 SQL的关键字也可能成为真正的查询关键字,到那是被你屏蔽了那用户不是不能正常的使用了。 只要在代码规范上下点功夫就可以了。

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/webkaifa/)

  凡涉及到执行的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=fibdn[ii]; if (tem'; p1==temp2) { return 0; } } } return 1; }

展开更多 50%)
分享

猜你喜欢

JSP如何防范SQL注入攻击

Web开发
JSP如何防范SQL注入攻击

JSP 防范SQL注入攻击分析

Web开发
JSP 防范SQL注入攻击分析

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

防范SQL注入式攻击

SQLServer
防范SQL注入式攻击

防范sql注入式攻击js版本

Web开发
防范sql注入式攻击js版本

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

SQL注入程序带来的攻击及防范

Web开发
SQL注入程序带来的攻击及防范

Dreamweaver中sql注入式攻击的防范

Web开发
Dreamweaver中sql注入式攻击的防范

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

外企急需四类专业人才

外企急需四类专业人才

分开了就分手了 但不代表我不爱了 - QQ图案分组

分开了就分手了 但不代表我不爱了 - QQ图案分组
下拉加载更多内容 ↓