知识大全 JSP如何防范SQL注入攻击

Posted 语句

篇首语:不登高山,不知天之高也;不临深溪,不知地之厚也。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 JSP如何防范SQL注入攻击相关的知识,希望对你有一定的参考价值。

JSP如何防范SQL注入攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

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

  SQL注入攻击的总体思路

  发现SQL注入位置   判断服务器类型和后台数据库类型   确定可执行情况

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

  注入法

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

  select * from admin where username= XXX and password= YYY 的语句 若在正式运行此句之前 如果没有进行必要的字符过滤 则很容易实施SQL注入

  如在用户名文本框内输入 abc or = 在密码框内输入 则SQL语句变成

  select * from admin where username= abc or = and password= 不管用户输入任何用户名与密码 此语句永远都能正确执行 用户轻易骗过系统 获取合法身份

  猜解法

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

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

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

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

   PreparedStatement

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

  以下是几点原因

   代码的可读性和可维护性    PreparedStatement尽最大可能提高性能    最重要的一点是极大地提高了安全性

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

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

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

select * from tb_name = or = and passwd = 随意 ;

  因为 = 肯定成立 所以可以任何通过验证 更有甚者:

  把[ ; drop table tb_name; ]作为varpasswd传入进来 则:

  select * from tb_name = 随意 and passwd = ; drop table tb_name; 有些数据库是不会让你成功的 但也有很多数据库就可以使这些语句得到执行

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

   正则表达式

   检测SQL meta characters的正则表达式 /(\\% )|(\\ )|(\\ \\ )|(\\% )|(#)/ix

   修正检测SQL meta characters的正则表达式 /((\\% D)|(=))[^\\n]*((\\% )|(\\ )|(\\ \\ ) ne |

   典型的 SQL 注入攻击的正则表达式 /\\w*((\\% )|(\\ ))((\\% F)|o|(\\% F))((\\% )|r|(\\ 中国网管联盟 bitscn % ))/ix

   检测SQL注入 UNION查询关键字的正则表达式 /((\\% )|(\\ ))union/ix(\\% )|(\\ ) 单

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

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

   字符串过滤

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= ; i content replace(filter[i] ); return content;

   不安全字符屏蔽

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

  凡涉及到执行的SQL中有变量时 用JDBC(或者其他数据持久层)提供的如 PreparedStatement就可以 切记不要用拼接字符串的方法就可以了

  功能介绍 检查是否含有 \\\\ /   参数说明 要检查的字符串   返回值 是 不是   函数名是

function check(a) return ; fibdn = new Array ( \\\\ / ); i=fibdn length; j=a length; for (ii= ; ii for (jj= ; jj

temp =a charAt(jj); temp =fibdn[ii]; if (tem ; p ==temp ) return ; return ;

cha138/Article/program/Java/JSP/201311/20754

相关参考

知识大全 SQL注入攻击的原理及其防范措施

SQL注入攻击的原理及其防范措施  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ASP编程门槛很

知识大全 ASP.NET中如何防范SQL注入式攻击

ASP.NET中如何防范SQL注入式攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一什么是

知识大全 ASP.NET程序防范SQL注入式攻击的方法

ASP.NET程序防范SQL注入式攻击的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  要防

知识大全 ASP.NET程序防范SQL注入式攻击的方法[1]

ASP.NET程序防范SQL注入式攻击的方法[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 ASP.NET程序防范SQL注入式攻击的方法[2]

ASP.NET程序防范SQL注入式攻击的方法[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 用三种策略应对SQL注入攻击[2]

SQL注入防御:用三种策略应对SQL注入攻击[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 用三种策略应对SQL注入攻击[1]

SQL注入防御:用三种策略应对SQL注入攻击[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 利用instr()函数防止SQL注入攻击[2]

利用instr()函数防止SQL注入攻击[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 利用instr()函数防止SQL注入攻击[1]

利用instr()函数防止SQL注入攻击[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 数据库活动监控系列之SQL注入攻击

数据库活动监控系列之SQL注入攻击  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!如果你每天访问的网