防止sql注入拦截

拦截器中校验请求参数(漏洞修复之防止sql注入) 防止sql注入sql中我们常用# 但是有些时候难免要用到拼接sql,这时候我们在后端就要进行参数的判断,综合网上查找的情况,记录一下. 阅读详情

防止sql注入拦截

这两天在做一个sql注入拦截,期间遇到了不少问题,最大的问题是在,拦截sql注入后利用response 重定向到错误页面,始终无法实现跳转。发现原因是,ajax 异步请求时并不会对response重定向做处理。当然包括response.getWrite().print("");等页面都不会做出反应。

下面是我的代码,首先是编写一个拦截器

复制代码
package com.booway.pwbzh.util;

import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * sql注入攻击拦截
 * @author s
 */
public class SqlInjectFilter implements Filter
{
    FilterConfig filterConfig = null;

    /**
     * 初始化
     * @param filterConfig filterConfig
     * @throws ServletException 异常
     */
    public void init(FilterConfig filterConfig) throws ServletException
    {
        this.filterConfig = filterConfig;
    }

    public void destroy()
    {
        this.filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        try
        {
            // 获得所有请求参数名
            Enumeration params = req.getParameterNames();
            String sql = "";
            while (params.hasMoreElements())
            {
                // 得到参数名
                String name = params.nextElement().toString();
                // 得到参数对应值
                String[] value = req.getParameterValues(name);
                for (int i = 0; i < value.length; i++)
                {
                    sql = sql + value[i];
                }
            }
            // 截取我要拦截的字段
            sql = getfilte(sql);
            // 有sql关键字,跳转到error.html
            if (sqlValidate(sql))
            {
                res.setHeader("SESSIONSTATUS", "TIMEOUT");
                res.setHeader("CONTEXTPATH", req.getContextPath() + "/pwbzh_module/500.jsp");
                res.setStatus(HttpServletResponse.SC_FORBIDDEN);
                return;
                // throw new IOException("您发送请求中的参数中含有非法字符");

            }

            chain.doFilter(request, response);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

    // 效验
    protected static boolean sqlValidate(String str)
    {
        str = str.toLowerCase();// 统一转为小写
        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" + "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" + "table|from|grant|use|group_concat|column_name|" + "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" + "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";// 过滤掉的sql关键字,可以手动添加
        String[] badStrs = badStr.split("\\|");
        for (int i = 0; i < badStrs.length; i++)
        {
            // 循环检测,判断在请求参数当中是否包含SQL关键字
            if (str.indexOf(badStrs[i]) >= 0)
            {
                return true;
            }
        }
        return false;
    }

    // 截取需要拦截的字段
    protected static String getfilte(String str)
    {
        int idex = str.indexOf("filter");
        String ss = "";
        if (idex < 0)
        {
            return ss;
        }
        if (str.indexOf(",", idex) < 0)
        {
            ss = str.substring(idex, str.length());
        }
        else
        {
            ss = str.substring(idex, str.indexOf(",", idex));
        }
        return ss;
    }
}
复制代码

在xml中加入拦截配置

复制代码
<module:servletfilter id="SqlInjectFilter">
<module:filter-name>SqlInjectFilter</module:filter-name>
<module:filter-class>
com.booway.pwbzh.util.SqlInjectFilter
</module:filter-class>
<module:url-pattern>*/*</module:url-pattern>
</module:servletfilter> 
复制代码

最关键的,要突破ajax 实现跳转在首页加入下面这个方法

复制代码
$.ajaxSetup( {  
    //设置ajax请求结束后的执行动作  
    complete :   
    function(XMLHttpRequest, textStatus) {  
        // 通过XMLHttpRequest取得响应头,sessionstatus  
        var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus");  
        if (sessionstatus == "TIMEOUT") {  
            var win = window;  
            while (win != win.top){  
                win = win.top;  
            } 
           //alert("请不要尝试sql注入!");
                win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");  
        }  
    }  
}); 
复制代码

 

解决方案出自 http://blog.youkuaiyun.com/guiyingde/article/details/53381734 感谢面向阳光的向日葵。

标签:  sql注入,  ajax,  response,  重定向,  异步,  拦截
SCL3400-D01双轴高精度倾角计 简介 两轴高精度加速度计,提供两个模式。 ±30° with 10 Hz LPF ±90° with 40 Hz LPF Resolution up to 32768 LSB/g Ultra-low 0.0009°/√Hz noise density 这款传感器是替换之前村田的停产的模拟量系列的芯片,正在测试中,具体效果大伙可以评测。 一、引脚连接图 引脚图兼容SCL3300 二、SPI接口 1.SCL3300和SCL3400略有区别如下图 左边为SCL3... 阅读详情

相关推荐

【数学基础】基于欧拉角表达的旋转顺序

欧拉角旋转顺序

FalschxMico 1384

防止SQL注入攻击的10种有效方法

本文介绍了10种防止SQL注入攻击的方法,包括使用参数化查询、输入验证和过滤、存储过程、最小权限原则、ORM框架、准备语句、安全的数据库连接、避免动态拼接SQL语句、使用防火墙和入侵检测系统以及定期更新和维护数据库软件。输入验证和过滤是一种用于确保用户输入数据的安全性和有效性的技术。需要注意的是,具体的代码实现可能因使用的数据库驱动库而有所不同,但核心思想是相同的:使用PreparedStatement来执行参数化查询,将用户输入作为参数传递给查询,而不是直接拼接到查询字符串中,以提高应用程序的安全性。

qq_28245087的博客 7万+

在WinXP操作系统上安装Tornado2.2详细教程

使用VxWorks的人都想在自己的电脑中装VxWorks的编译器Tornado,然而Win10操作系统对于Tornado并不友好,根本装不成功。而对于Win7操作系统,之前在实验室一台Win7上装Tornado成功过,并且一直在上面进行vx开发,但是过一段时间在其他Win7上装Tornado时又不能成功,由此说明Tornado对于Win7操作系统对Tornado的兼容也不是很好,所以想要长久使用T...

weixin_43822311的博客 4480

实战点总结

java面试题汇总

m0_69057918的博客 811

【vsomeip3 教程】SOME/IP中间件去抖策略全解析

本文探讨了在SOME/IP中间件中实现Debounce(去抖动)机制的必要性和实现原理。文章首先分析了中间件层进行Debounce的四大动机:多订阅者共享收益、语义显式化、协议噪声屏蔽和入口处背压控制。接着详细阐述了Debounce的底层原理,包括变化检测机制(ignore和mask的应用)、时间门控策略(interval的两种时间基准)以及超时补发机制,并通过表格清晰展示了不同参数组合的效果和适用场景。最后,文章提出了工程落地的具体方法,包括策略选型、ignore/mask的设计方法论以及分层验证调试的实

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 232

一文吃透 SAP IDoc 状态码:从 TEDS1 到 WE02 排障,再到 ABAP 自动化监控

在 SAP 集成场景里,IDoc 往往是最常见、也最容易被低估的一条生命线:采购订单、发票、主数据、库存移动……只要系统之间要稳定地交换结构化业务数据,IDoc 就经常登场。真正让人头疼的,并不是 IDoc 本身,而是它在链路里到底走到了哪一步、卡在了哪里、该找谁背锅。这篇文章把常用的 IDoc 状态码按出站、入站拆开讲清楚,并且把每个状态对应的真实世界故障现象、排查入口、以及可以落地的 ABAP 监控代码串起来,让你看到状态码就能想到动作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 405

SQL注入攻击的防御方法

由于参数值会被正确转义并严格作为数据对待,而非指令的一部分,即使输入包含恶意的SQL代码,也不会被执行。对所有用户输入进行严格的验证和过滤,确保其符合预期的数据类型、长度、格式和字符集。拒绝或清理不符合规则的输入,移除或转义可能用于SQL注入的特殊字符(如单引号、双引号、分号、注释符等)。ORM框架将对象与数据库表进行映射,自动处理数据查询和持久化,同时确保在生成SQL时对用户输入进行适当的转义或参数化。对于必须手动编写的SQL查询,确保使用适当的方法(如函数或库)对用户输入进行转义。

qq_69100706的博客 923

[ATF]-smc指令详解

1、在ree/tee调用smc之前 2、调用smc之后,cpu触发同步异常,进入ATF的sync_exception_aarch64—>handle_sync_exception—>smc_handler64处理函数 在smc_handler64中又调用了smc_handler func smc_handler64 /* ---------------------------------------------- * Detect if this is a RUN_IMAGE or ot

baron-周贺贺-代码改变世界ctw 1万+

springboot应用sql注入拦截处理

springboot应用sql注入拦截处理

liaomingwu的专栏 5084

手把手教你学simulink实例--基于Simulink的船舶动力装置性能评估与仿真

船舶动力装置是船舶运行的核心系统,其性能直接影响船舶的安全性、经济性和环保性。基于MATLAB/Simulink平台进行船舶动力装置性能评估与仿真是研究和优化船舶动力系统的重要手段。通过建模与仿真,可以分析动力装置在不同工况下的性能表现,并验证控制策略的有效性。本项目旨在构建一个完整的船舶动力装置性能评估与仿真模型,包括发动机建模、传动系统建模、负载分析以及性能评估模块,并通过仿真分析其动态响应和性能指标。

MHD0815的博客 972

【Frida Android】实战篇8:客户端证书认证绕过 Hook 教程

通过重写类的方法,自定义证书校验逻辑;利用配置文件,从系统层面管理证书信任策略;以及通过 OkHttp 框架提供的方法,实现证书的强绑定校验。这些内容主要围绕客户端如何验证服务端证书的合法性展开。客户端证书认证。当 APK 预置了客户端证书,并且服务端会对客户端证书进行校验时,传统的中间人攻击方式将面临新的挑战。我们将深入分析这种场景的工作原理,并详细介绍如何通过技术手段获取客户端证书、配置中间人工具,最终成功实现抓包分析。

水滴石穿 1426

防止SQL注入的四种方案

SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。SQL案列这个id从请求参数中获取,若参数被拼接为:1001 or 1 = 1此时,数据库的数据都会被清空掉,后果非常严重.

dehuisun的专栏 1万+

基于Costas环的载波同步实现及Matlab仿真

其中,第一个相位环接收带噪声的待同步载波,并产生一个相位误差信号,这个误差信号再通过第二个相位环进行反馈控制,使得两个相位环的相位差保持为90度,最终输出同步载波信号。接下来,我们可以编写Costas环的仿真程序,并将上面生成的信号输入到Costas环中进行同步,最终输出同步后的载波信号。综上所述,本文介绍了如何使用Matlab实现基于Costas环的载波同步,并给出相应的源代码。上述代码中,我们初始化了Costas环的各个参数,然后通过循环迭代实现了相位估计和相位误差控制,最终输出了同步后的载波信号。

2301_78484069的博客 1048

spring 防止SQL注入的拦截器

package org.jeecgframework.core.interceptors; import java.util.Enumeration; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.jeecgframework.core

程序员石磊 3099

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

利用拦截器实现sql防止注入

web.xml的代码: sqlInjectionFilter com.suning.mcms.web.auth.filter.SqlInjectionFilter sqlInjectionFilter *.do 拦截器的代码: package com.suning.mcms.web.

an341221的专栏 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用SpringAOP拦截关键字,防止sql注入

使用SpringAOP拦截关键字,防止sql注入前言一、SqlFilter是什么?二、使用步骤1.在web.xml中配置2.编写过滤方法总结 前言 SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息 一、SqlFilter是什么? sqlFilter主要是用来防止sql注入,在数据做防sql注入

wuweuhai的博客 1314

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

ajax防止sql注入,spring 防止SQL注入的拦截器

package org.jeecgframework.core.interceptors;import java.util.Enumeration;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.ap...

weixin_35551554的博客 606

struts2拦截器来防止sql注入

SQL注入攻击能得逞是因为在原有SQL语句中加入了新的逻辑 比如:原sql="select * from user where userid='"+userid+"'"; 如果,我们把userid="' or 1='1"; 这样拼接的sql="select * from user where userid='' or 1='1'"; 这样的sql就可列出表里的所有记录 对于一个好的程序员...

weixin_30780649的博客 616

SpringMVC利用拦截器防止SQL注入

引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题。小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要。而这些网站的背后,则是支撑整个服务的核心数据库。可以说数据库就是这些服务的命脉,没有数据库,也就无从谈起这些服务了。 对于数据库系统的安全特性,主要包括数据独立性、数据安全性、数据完整性、并发控制、故障恢复等方...

267

springmvc 拦截器_SpringMVC是如何利用拦截器防止SQL注入

SQL注入简介通俗的讲,SQL注入就是恶意黑客或者竞争对手利用现有的B/S或者C/S架构的系统,将恶意的SQL语句通过表单等传递给后台SQL数据库引擎执行。比如,一个黑客可以利用网站的漏洞,使用SQL注入的方式取得一个公司网站后台的所有数据。试想一下,如果开发人员不对用户传递过来的输入进行过滤处理,那么遇到恶意用户的时候,并且系统被发现有漏洞的时候,后果将是令人难以想象的。最糟糕的是攻击者拿到了数...

weixin_39603265的博客 673

防止Sql注入拦截

这两天在做一个sql注入拦截,期间遇到了不少问题,最大的问题是在,拦截sql注入后利用response 重定向到错误页面,始终无法实现跳转。发现原因是,ajax 异步请求时并不会对response重定向做处理。当然包括response.getWrite().print(“”);等页面都不会做出反应。 下面是我的代码,首先是编写一个拦截器 package com.booway.pwbzh

liuxinyang666的博客 1121

Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么?

Mybatis 如何防止 sql 注入?mybatis 拦截器了解过吗,应用场景是什么? 答案:mybatis使用#{}经过预编译的,是安全的,防止sql注入。 Mybatis拦截器只能拦截四种类型的接口:Executor、StatementHandler、 ParameterHandler和ResultSetHandler。这是在Mybatis的Configuration中写死了的, 如果要支持拦截其他接口就需要我们重写 Mybatis 的 Configuration。Mybatis 可以对这四 个接口中

webot123456的博客 772

mysql查询防拦截_防止sql注入拦截

packagecom.booway.pwbzh.util;importjava.util.Enumeration;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.se...

weixin_39641257的博客 401

java拦截器实现防止SQL注入与xss攻击拦截

一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三、SQL注入攻击实例 比如在一个登录界面,要求输...

WWXA 1万+
上一篇: HTML DOM confirm() 方法
下一篇: JS代码防止SQL注入的方法(超简单)
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值