`
xudongcsharp
  • 浏览: 475095 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在过滤器中判断URL是否被注入

    博客分类:
  • JSP
 
阅读更多
巩固知识:
//获取来源URL:
String fromURL = request.getHeader("Referer"); 

// /ssm/ser.do 
String url = request.getRequestURI();    

// http://localhost:8080/ssm/ser.do  
StringBuffer url_buffer = request.getRequestURL(); 

//常用的request头信息
    out.println("Protocol: " + request.getProtocol());   
    out.println("Scheme: " + request.getScheme());   
    out.println("Server Name: " + request.getServerName() );   
    out.println("Server Port: " + request.getServerPort());   
    out.println("Protocol: " + request.getProtocol());   
    out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());   
    out.println("Remote Addr: " + request.getRemoteAddr());   
    out.println("Remote Host: " + request.getRemoteHost());   
    out.println("Character Encoding: " + request.getCharacterEncoding());   
    out.println("Content Length: " + request.getContentLength());   
    out.println("Content Type: "+ request.getContentType());   
    out.println("Auth Type: " + request.getAuthType());   
    out.println("HTTP Method: " + request.getMethod());   
    out.println("Path Info: " + request.getPathInfo());   
    out.println("Path Trans: " + request.getPathTranslated());   
    out.println("Query String: " + request.getQueryString());   
    out.println("Remote User: " + request.getRemoteUser());   
    out.println("Session Id: " + request.getRequestedSessionId());   
    out.println("Request URI: " + request.getRequestURI());   
    out.println("Servlet Path: " + request.getServletPath());   
    out.println("Accept: " + request.getHeader("Accept"));   
    out.println("Host: " + request.getHeader("Host"));   
    out.println("Referer : " + request.getHeader("Referer"));   
    out.println("Accept-Language : " + request.getHeader("Accept-Language"));   
    out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));   
    out.println("User-Agent : " + request.getHeader("User-Agent"));   
    out.println("Connection : " + request.getHeader("Connection"));   
    out.println("Cookie : " + request.getHeader("Cookie"));   
    out.println("Created : " + session.getCreationTime());   
    out.println("LastAccessed : " + session.getLastAccessedTime());  



***********************************************
web.xml
<filter>
        <filter-name>URLFilter</filter-name>  
        <filter-class>com.shctc.util.URLFilter</filter-class>
        <init-param>
  		<param-name>sqlInj</param-name>
  		<param-value>java|String|and|exec|insert|select|delete|update|*|chr|mid|master|truncate|char|declare|;|-|+|,</param-value>
  	  </init-param>
    </filter>
    <filter-mapping>  
        <filter-name>URLFilter</filter-name>  
        <url-pattern>*.action</url-pattern>
    </filter-mapping>



Filter
public class URLFilter implements Filter{
	
	private static final long serialVersionUID = 12345L;

	Logger log =Logger.getLogger(URLFilter.class);
	private FilterConfig config=null;
	private String sqlInj="";
	
	public void init(FilterConfig config) throws ServletException{
		this.config=config;
		log.debug("FilterConfig:"+config);
		sqlInj=config.getInitParameter("sqlInj");
	}
	
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException{
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse resp = (HttpServletResponse) response;
		String UserIP = request.getRemoteAddr();
		String requestURL = req.getRequestURL()+ req.getQueryString();
		log.debug("******请求用户来源:"+req.getHeader("Referer"));
		log.debug("******请求用户IP地址:"+UserIP);
		log.debug("******请求URL:"+requestURL);
		
		String[] inj_stra=sqlInj.split("\\|"); 
		for (int i=0; i < inj_stra.length; i++){
			if (requestURL.indexOf(inj_stra[i])>=0){  
				log.debug("******返回主页了,因为请求URL中含有敏感字符:"+inj_stra[i]);
				resp.sendRedirect("page/index.action");
			    return;
			}
		}
		
		//如果存在下一个dofilter方法,则调用下一个过滤器的dofilter方法;否则一直停在这
		chain.doFilter(request, response);
	}
	
	public void destroy(){
		config=null;
	}
分享到:
评论

相关推荐

    jsp+servlet登录验证过滤器

    6. **配置过滤器**:在`web.xml`部署描述符中,需要定义过滤器,指定其类名、初始化参数以及过滤的URL模式。这样,当符合这些模式的请求到来时,过滤器就会被调用。 7. **过滤器接口**:主要使用`javax.servlet....

    基于代理模式的SQL注入过滤方法.pdf

    传统的防御方法如关键字过滤和正则表达式过滤虽然在一定程度上能够拦截一些注入攻击,但其效果并不理想,因为攻击者经常会通过各种手段绕过这些过滤器。 文章中提出的LFS方法(length-frequency-SQL syntax tree)...

    sql注入常识和防范

    - 利用注释符绕过过滤器:有些程序会过滤掉特定字符如单引号`'`,这时可以使用注释符`--`来绕过过滤。 - 构造联合查询:通过联合查询可以一次性获取多个表的信息。 - 使用盲注技术:在无法直接获取反馈的情况下,...

    手工SQL注入常用SQL语句

    - **布尔盲注**:通过构造带有`AND 1=1`和`AND 1=2`的URL来测试是否可以注入。如果页面显示正常,则表示可能存在SQL注入漏洞。 - **错误注入**:利用错误消息来确定是否存在SQL注入漏洞。例如,在输入中加入单引号...

    自己动手编写SQL注入漏洞扫描工具

    5. **漏洞确认**:基于响应的分析,判断是否存在SQL注入漏洞。例如,如果注入导致了额外数据的返回,或者请求执行时间明显增加,可能就存在注入点。 在提供的压缩包中,有两个程序可能实现了这些步骤的一部分或全部...

    mybatis如何防止SQL注入

    SQL注入是一种常见的Web应用程序安全漏洞,攻击者可以通过提交恶意的SQL代码到应用程序的输入字段中(如表单、URL等),利用这些输入来操控数据库执行非预期的操作,进而获取敏感数据、修改数据甚至破坏整个数据库...

    你真的了解Filter过滤器 ?

    在Java Web开发中,Filter过滤器是一个至关重要的概念,它属于JavaWeb的三大核心组件之一,另外两个是Servlet程序和Listener监听器。Filter的主要职责在于对HTTP请求进行预处理以及对响应进行后处理,而并非直接生成...

    动态过滤器解析器

    在Java应用中,动态过滤器解析器允许开发者根据特定条件或运行时环境动态地决定哪些过滤器应该被应用到请求流程中,提供了一种灵活且强大的过滤机制。 首先,我们要理解过滤器(Filter)在Java Web应用程序中的作用...

    SQL注入攻击及防御技术的研究.pdf

    注入式攻击指的是攻击者直接向表单或URL中注入恶意SQL代码,而恶意提交式则涉及到在正常数据提交的过程中附带恶意的SQL代码。 SQL注入攻击的方法通常遵循以下步骤:首先攻击者会尝试确定网站是否存在注入漏洞,然后...

    半自动注入猜解器(perl)

    4. **错误处理和反馈**:在猜解过程中,猜解器会捕获服务器返回的错误信息,根据错误信息的差异来判断猜测是否正确。例如,如果注入导致查询失败,服务器可能会返回一个特定的错误页面,而成功时则不会。 5. **自动...

    详解SpringCloud Zuul过滤器返回值拦截

    // 判断是否需要执行该过滤器,这里根据请求URI决定是否拦截登录接口 @Override public boolean shouldFilter() { RequestContext context = getCurrentContext(); return StringUtils.equals(context.get...

    饶过防注入系统方法总结.txt

    1. **URL编码**:使用URL编码来绕过某些过滤器,例如将`or 1=1`编码为`%6f%72%20%31%3d%31`。 2. **ASCII码替换**:将字符串转换为其对应的ASCII码表示形式,如`CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)`相当于`'...

    Spring Security中的Servlet过滤器体系代码分析

    它根据请求URL和Ant风格的模式来判断请求是否匹配,如果匹配,则执行对应的过滤器链。例如,登录请求可能通过一个包含认证过滤器的链,而管理接口可能通过另一个包含更严格授权规则的链。 6. **FilterChainProxy** ...

    Ajax 无刷新在注册用户名时判断是否为空是否被使用

    ` 这一行代码用于在IE浏览器中创建XMLHttpRequest对象,它是实现Ajax的核心组件。现代浏览器通常使用 `new XMLHttpRequest()` 创建,但为了兼容老版本的IE,这里使用了ActiveXObject。 2. **定义回调函数**:`...

    spring+acegi+中文手册

    - **Acegi 在 Web 应用中的作用**:Acegi 使用 Servlet 过滤器来拦截 Servlet 请求,实现身份验证和安全性控制。 - **Acegi 的独特声明方式**:通过 Spring IoC 注入 Acegi 所需的其他对象,使得 Acegi 的配置更加...

    交织::cyclone:React库可安全地呈现HTML,过滤器属性,使用匹配器自动换行文本,呈现表情符号字符等

    使用过滤器清除HTML属性。 使用匹配器插入组件。 自动链接URL,IP,电子邮件和主题标签。 渲染表情符号和表情符号字符。 以及更多! &lt; Interweave xss=removed&gt;HTML&lt;/b&gt; and will safely be rendered!" / &gt; &lt; ...

    精通AngularJS part1

    从JavaScript代码中访问过滤器133 过滤器做什么与不做什么134 过滤器与DOM操作135 过滤器中代价高昂的数据变换136 不稳定的过滤器136 48摘要138 第5章创建高级表单139 51AngularJS表单与传统表单的比较139 ...

    sqli-bypass靶场

    3. **利用编码**:使用URL编码、HTML编码或其他编码方式来绕过过滤器,使恶意代码看起来像是正常字符。 4. **时间盲注**:如果系统对查询进行了限制或过滤,时间盲注允许攻击者通过检查查询的执行时间来判断条件...

Global site tag (gtag.js) - Google Analytics