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

智能推荐

JDOM-程序员宅基地

文章浏览阅读57次。JDOM是一种使用 XML(标准通用标记语言下的一个子集) 的独特 Java 工具包,。它的设计包含 Java 语言的语法乃至语义。概述编辑JDOM是两位著名的 Java 开发人员兼作者,Brett Mclaughlin 和 Jason Hunter 的创作成果, 2000 年初在类似于Apache协议的许可下,JDOM作为一个开放源代码项目正式开始研发了。它已成长为包含来自...

LangChain-Chatchat学习资料-Windows开发部署(踩坑篇)_int4weightextractionhalf-程序员宅基地

文章浏览阅读832次。1.[LangChain-Chatchat学习资料-简介]2.[LangChain-Chatchat学习资料-Windows开发部署]3.[LangChain-Chatchat学习资料-Windows开发部署(踩坑篇)]4.LangChain-Chatchat学习资料-Ubuntu安装Nvidia驱动和CUDA5.LangChain-Chatchat学习资料-Ubuntu开发部署6.LangChain-Chatchat学习资料-Ubuntu开发部署(踩坑篇)_int4weightextractionhalf

字符串匹配的KMP算法_字符串匹配kmp算法时间复杂度-程序员宅基地

文章浏览阅读458次。字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上有很多解释,但读起来都很_字符串匹配kmp算法时间复杂度

关于ElementUI中级联选择器选择内容时出现空白的情况_element级联选择器空白框-程序员宅基地

文章浏览阅读6.5k次。关于ElementUI中级联选择器选择内容时出现空白的情况使用ElementUI中级联选择器进行某些数据的选择时,发现最后一级是空白的页的情况,如下图所示:原因分析通过查看请求中的响应我们发现,响应数据中存在children为[]空数组的情况,而在ElementUI中的级联选择器里,[]会被解析为空白数据进行展示,因此,前端人员在接受到后端开发人员返回的数据时,需要将children为[..._element级联选择器空白框

Sqoop ERROR metastore.GenericJobStorage: Cannot restore job-程序员宅基地

文章浏览阅读613次,点赞2次,收藏2次。我的环境为 CDH 6.2 sqoop1.4.7 出现这个错误。我这里不考虑没有创建JOB的情况。因为,我已经创建几次job。同时我执行运行job时,有时可以运行,有时不可以运行。20/04/27 10:22:41 ERROR metastore.GenericJobStorage: Cannot restore job: acc_account_ply_base_job20/04/27 10..._error metastore.genericjobstorage: cannot restore job: myjob_incremental_imp

git基本命令的使用以及使用原理的总结-程序员宅基地

文章浏览阅读574次,点赞11次,收藏23次。由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容,详细完整版的JavaScript面试题文档,或更多前端资料可以点此处即可获取!!!。来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)[外链图片转存中…(img-MRz3uxG8-1711663304128)][外链图片转存中…(img-lOUaHxYh-1711663304129)]

随便推点

如何从零将vue+springboot项目打包部署到云服务器(亲测,图文教程超详细!!)_spring boot vue 部署 图解-程序员宅基地

文章浏览阅读5.2k次,点赞30次,收藏115次。手把手教如何将个人项目部署到云服务器(超详细!!)步骤目录手把手教如何将个人项目部署到云服务器(超详细!!)前言一、云服务器设置1.1 首先去购买一个云服务器,阿里或腾讯,具体步骤就不讲了1.2 拿到服务器后先修改密码1.3 修改服务器安全组策略1.4 远程连接云服务器二、远程服务器环境配置2.1 安装jdk(1) 将Linux系统下自带JDK(如果原先安装过,无则忽略)的删除(2) JDK11的安装(3) 设置JAVA_HOME2.2 安装配置MySQL(1)下载mysql(2)卸载Maria DB_spring boot vue 部署 图解

Docker容器—Windows下的安装与使用_docker windows容器-程序员宅基地

文章浏览阅读5.8k次,点赞3次,收藏12次。Docker容器—Windows下的安装与使用_docker windows容器

云原生数据库性能对比(阿里云、百度智能云、腾讯云)-程序员宅基地

文章浏览阅读1.7k次,点赞27次,收藏27次。SysBench 是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。

CAS单点登录6 - 服务端自定义返回的用户信息_如何获取单点登录自定义得值-程序员宅基地

文章浏览阅读3.9k次。原理返回的用户信息是在deployerConfigContext.xml中的配置的既然想自定义返回的用户信息,那么继承org.jasig.services.persondir.support.StubPersonAttributeDao就好了1、创建com.jadyer.sso.authentication extends StubPersonAttributeDao并复写getPer..._如何获取单点登录自定义得值

5G/NR 学习笔记: 3GPP 物理层概述38.201_3gpp物理层流程-程序员宅基地

文章浏览阅读6.4k次,点赞7次,收藏40次。物理信道和调制方式下行信道:PDSCH,PDCCH,PBCH 上行信道:PRACH,PUSCH,PUCCH下行调制:QPSK,16QAM,64QAM,256QAM 上行调制:QPSK,16QAM,64AQM,256QAM for OFDM with a CP;π/2-BPSK, QPSK, 16QAM, 64QAM and 256QAM for DFT-s-OFDM with a CP..._3gpp物理层流程

jq 解析josn字符串-程序员宅基地

文章浏览阅读97次。1. var obj = jQuery.parseJSON("${ruleModel.rules}");2. var obj = eval("("+"${ruleModel.rules}"+")");//上面两种方式解析josn 字符串,第一种要求规范的josn格式(要求键和值 都要有双引号),第二种能够满足非规范格式的josn字符串 ..._jq 如何解析带-字段

推荐文章

热门文章

相关标签