JSP防SQL注入攻击-程序员宅基地

技术标签: string  import  jsp  insert  正则表达式  sql  

第一种采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setString方法传值即可:
String sql= "select * from users where username=? and password=?;
PreparedStatement preState = conn.prepareStatement(sql);
preState.setString(1, userName);
preState.setString(2, password);
ResultSet rs = preState.executeQuery();
...

第二种是采用正则表达式将包含有 单引号('),分号(;) 和 注释符号(--)的语句给替换掉来防止SQL注入

例1
public static String TransactSQLInjection(String str)
{
return str.replaceAll(".*([';]+|(--)+).*", " ");
}

userName=TransactSQLInjection(userName);
password=TransactSQLInjection(password);

String sql="select * from users where username='"+userName+"' and password='"+password+"' "
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery(sql);
...

 

 

或者例2

要引入的包:
import java.util.regex.*;

正则表达式:
private String CHECKSQL = “^(.+)//sand//s(.+)|(.+)//sor(.+)//s$”;

判断是否匹配:
Pattern.matches(CHECKSQL,targerStr);

下面是具体的正则表达式:
检测SQL meta-characters的正则表达式 :
/(/%27)|(/’)|(/-/-)|(/%23)|(#)/ix
修正检测SQL meta-characters的正则表达式:/((/%3D)|(=))[^/n]*((/%27)|(/’)|(/-/-)|(/%3B)|(:))/i
典型的 SQL 注入攻击的正则表达式://w*((/%27)|(/’))((/%6F)|o|(/%4F))((/%72)|r|(/%52))/ix
检测SQL注入,UNION查询关键字的正则表达式 :/((/%27)|(/’))union/ix(/%27)|(/’)
检测MS SQL Server SQL注入攻击的正则表达式:
/exec(/s|/+)+(s|x)p/w+/ix
等等…..

第三种是字符串过滤

例1

sql_inj.java为一个改进的防注入bean,编译后将class文件放在tomcat的classes下的sql_inj目录中。

sql_inj.java代码:
====================================================================
package sql_inj;

import java.net.*;
import java.io.*;
import java.sql.*;
import java.text.*;
import java.lang.String;

public class sql_inj{
public static boolean sql_inj(String str)
{
    String inj_str = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,";//这里的东西还可以自己添加
String[] inj_stra=inj_str.split("//|");
    for (int i=0 ; i < inj_stra.length ; i++ )
    {
        if (str.indexOf(inj_stra[i])>=0)
        {
            return true;
        }
    }
    return false;
}
}
====================================================================

JSP页面判断代码:
====================================================================
<jsp:useBean id="sql_inj" class="sql_inj.sql_inj" scope="page"/>
<%
String   currenturl   =   request.getRequestURI()+(request.getQueryString()==null?"":("?"+request.getQueryString()));
if (sql_inj.sql_inj(currenturl)){ //判断url及参数中是否包含注入代码,是的话就跳转到某页。
response.sendRedirect("/");
return;
}
//out.println(currenturl);

例2

 

public static boolean sql_inj(String str) { String inj_str = "'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; String inj_stra[] = split(inj_str,"|"); for (int i=0 ; i &lt; inj_stra.length ; i++ ) { if (str.indexOf(inj_stra[i])&gt;=0) { return true; } } return false; }

4.jsp中调用该函数检查是否包函非法字符
=======================================

防止SQL从URL注入:

sql_inj.java代码:
=======================================

package sql_inj; import java.net.*; import java.io.*; import java.sql.*; import java.text.*; import java.lang.String; public class sql_inj { public static boolean sql_inj ( String str ) { String inj_str = "'|and|exec|insert|select|delete|update| count|*|%|chr|mid|master|truncate|char|declare|;|or|-|+|,"; //这里的东西还可以自己添加 String [ ] inj_stra =inj_str. split ( "//|" ); for ( int i =0 ; i &lt; inj_stra. length ; i ++ ) { if (str. indexOf (inj_stra [i ] ) &gt;=0 ) { return true; } } return false; } }

======================================
5.JSP页面判断代码:
===================================

使用javascript在客户端进行不安全字符屏蔽

功能介绍:检查是否含有”‘”,”//”,”/”
参数说明:要检查的字符串
返回值:0:是 1:不是
函数名是
function check(a)
{
return 1;
fibdn = new Array (”‘” ,”//”,”/”);
i=fibdn.length;
j=a.length;
for (ii=0; ii<i; ii++)
{ for (jj=0; jj<j; jj++)
{ temp1=a.charAt(jj);
temp2=fibdn[ii];
if (tem’; p1==temp2)
{ return 0; }
}
}
return 1;

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhouhuan1204/article/details/4707522

智能推荐

2024年Vue最常见的面试题以及答案(面试必过),数据结构与算法面试题及答案_面试题 vue 数结构数据怎么组合-程序员宅基地

文章浏览阅读636次,点赞13次,收藏9次。基础知识是前端一面必问的,如果你在基础知识这一块翻车了,就算你框架玩的再6,webpack、git、node学习的再好也无济于事,因为对方就不会再给你展示的机会,千万不要因为基础错过了自己心怡的公司。前端的基础知识杂且多,并不是理解就ok了,有些是真的要去记。当然了我们是牛x的前端工程师,每天像背英语单词一样去背知识点就没必要了,只要平时工作中多注意总结,面试前端刷下题目就可以了。网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。_面试题 vue 数结构数据怎么组合

表和索引的并行度问题_查看索引并行度-程序员宅基地

文章浏览阅读626次。表和索引的并行度问题_查看索引并行度

使用Anaconda的python安装虚拟环境出现错误_ps e:\backups\medical_qa> python manage.py d:\soft-程序员宅基地

文章浏览阅读7.6k次。 首先,你需要在终端命令窗口中执行pip install --user virtualenv 然后运行代码创建虚拟环境目录learning_logpython -m venv learning_log 之后报错:Error: Command '['C:\\Users\\shui02\\learning_log\\Scripts\\python.exe', '-Im', ..._ps e:\backups\medical_qa> python manage.py d:\software\anaconda3\python.exe:

Python入门(二) part2 元组_python二维元组-程序员宅基地

文章浏览阅读422次。目录一、元组的创建1.小括号创建2.tuple()方法转换3.元组生成器4.序列解包二、访问元组三、元组的更新和删除四、元组相关的操作符五、内置方法六、解压元组1.解压一维2.解压二维3.取指定元素定义:语法为(元素1, 元素2, ..., 元素n),用小括号把所有元素绑在一起,逗号将每个元素一一分开特征:元组内元素不能修改 但元组内元素的元素可以修改 元组可以使代码更安全 元组的访问速度比列表更快,开销更小 如果要定义一系列常_python二维元组

hive向mysql导数据_Mysql & Hive 导入导出数据-程序员宅基地

文章浏览阅读118次。---王燕行转列sqlselect split(concat_ws(',',collect_set(cast(smzq as string))),',')[1] ,split(concat_ws(',',collect_set(cast(smzq as string))),',')[2] from wyy;---mysql 导入 导出数据部分--mysql 导入load data infile..._hivesql into outfile

Node.js开发-path模块_前端代码 path-程序员宅基地

文章浏览阅读1.4k次,点赞10次,收藏8次。path 模块提供了。_前端代码 path

随便推点

虚拟化应用(三)Hyper-V 2.0 初探-程序员宅基地

文章浏览阅读98次。前面两次我们主要测试了VMWare vSphere 4.1以及vCenter Server 4.1的基本操作,今天先把VMWare放一放,来关注下我们最熟悉的微软。Hyper-V是微软提出的服务器虚拟化解决方案,在微软的虚拟化战略中扮演了重要角色。微软的虚拟化解决方案分为三大部分:服务器虚拟化、桌面虚拟化、应用程序虚拟化。本次我们简要分析下Hyper-V,后面有时间再讨论其余两种虚拟化。测试脚..._hypervm 2.0

Springboot人才招聘管理系统-计算机毕设 附源码36930_springboot 实现一个飞书招聘系统-程序员宅基地

文章浏览阅读818次,点赞19次,收藏24次。本文人才招聘管理的功能要求出发,建立了人才招聘管理系统,系统中的主要分为管理员、求职用户、企业用户、三个部分,主要实现功能有:后台首页、个人管理、网站管理、内容管理、人员管理、职位信息、投递信息、面试通知等功能部分,经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与人才招聘管理系统实现的实际需求相结合,使用B/S结构、java开发语言、以及Mysql数据库等技术。在设计过程中,充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。_springboot 实现一个飞书招聘系统

Vue-Topo: 基于Vue的可视化拓扑图组件-程序员宅基地

文章浏览阅读607次,点赞4次,收藏10次。Vue-Topo: 基于Vue的可视化拓扑图组件项目地址:https://gitcode.com/Mirror198829/vue-topo在如今的Web开发中,数据可视化已经成为传递复杂信息、构建交互式界面的重要手段。Vue-Topo 是一个专为Vue.js框架设计的开源项目,它提供了一种优雅的方式来绘制和操作网络拓扑图,非常适合用于展示IT系统的架构、网络布局等场景。项目简介Vue-T..._vue 拓扑图前端组件

《黑客帝国:矩阵重启》科幻经典回归,你会选择红色药丸还是蓝色药丸-程序员宅基地

文章浏览阅读1.6k次。期待已久的《黑客帝国:矩阵重启》于一月中旬上线,整个矩阵重启,大段的叙事和镜头都在向前三部致敬:Neo的再次被唤醒,所需要作的选择依然是“红与蓝”——红色药丸代表了真实但残酷的现实,蓝色药丸代表了虚拟但美好的梦境。你会选择哪一个?作为超级视觉大片,《黑客帝国4》的大场面也是给足感官刺激。DNEG作为《黑客帝国4》的主要视觉特效供应商,在其伦敦、温哥华和印度的设施中分担了700多个镜头,Evans作为DNEG的视觉特效总监监督了这项工作。视觉特效总监Huw Evans已经习惯于为世界上顶级大片工作。E

随机获取诗句_random随机抽取一首诗-程序员宅基地

文章浏览阅读1.1k次。import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.StringSelection;import java.awt.datatransfer.Transferable;import java.util.Random;public class RandomStr { public static void main(String[] args) { ._random随机抽取一首诗

j2ee课程设计—基于activiti的请休假系统-程序员宅基地

文章浏览阅读740次。前言课设基于SSM框架,数据库采用mysql,主要业务交给activiti,版本控制利用github。参考资料:Intellij 部署SSM框架Activiti就是这么简单方大师的教材下文斜体部分均为Activiti就是这么简单中小标题。演示地址项目源码activiti学习小记基于0中Activiti就是这么简单,做些笔记。当前环境:按照Intellij 部署SSM框架中..._基于activiti的学生请假管理系统

推荐文章

热门文章

相关标签