xss和csrf其实就是一个过滤器和一个拦截器而已:放屁

2024-05-10 23:32

本文主要是介绍xss和csrf其实就是一个过滤器和一个拦截器而已:放屁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

CSRF攻击原理及防御:https://www.cnblogs.com/shytong/p/5308667.html 

CSRF 攻击的应对之道:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/

 

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

 

 

XSS

一个目标资源可以指定多个过滤器,过滤器的执行顺序是在web.xml文件中的部署顺序:

1.web.xml配置filter

  1.1配置要拦截的url的格式

  1.2配置拦截后的处理类

 

<filter><filter-name>XSSFilter</filter-name><filter-class>com.jd.ihotel.pc.webapp.filters.NewXssFilter</filter-class>
</filter>
<filter-mapping><filter-name>XSSFilter</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

一个filter可被多个mapping使用:

  1. <filter>  
  2.     <filter-name>authority</filter-name>  
  3.     <filter-class>com.util.AuthorityFilter</filter-class>  
  4. </filter>  
  5. <filter-mapping>  
  6.     <filter-name>authority</filter-name>  
  7.        <url-pattern>/pages/genbill/*</url-pattern>  
  8. </filter-mapping>  
  9. <filter-mapping>  
  10.     <filter-name>authority</filter-name>  
  11.     <url-pattern>/pages/cmm/*</url-pattern>  
  12. </filter-mapping>

2.配置依赖:

<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope>
</dependency>

新建:实现Filter类是初始化,过滤,销毁三个方法必须都实现(初始化和销毁可以是空方法,过滤方法中chain.doFilter的参数是装饰者模式的http请求对象和普通的http响应对象)

NewXssFilter类

过滤方法中新建一个request过滤对象(装饰者模式),以便可以对request的参数进行更改(过滤)

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;public class NewXssFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {chain.doFilter(new NewXssHttpServletRequestWraper((HttpServletRequest)request), response);//对request和response进行过滤}@Overridepublic void destroy() {}
}
 
新建NewXssHttpServletRequestWraper类
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;public class NewXssHttpServletRequestWraper extends HttpServletRequestWrapper {public NewXssHttpServletRequestWraper(HttpServletRequest request) {super(request);}@Overridepublic String getParameter(String name) {return clearXss(super.getParameter(name));}@Overridepublic String getHeader(String name) {return clearXss(super.getHeader(name));}@Overridepublic String[] getParameterValues(String name) {String[] values = super.getParameterValues(name);if (values == null) {return null;}String[] newValues = new String[values.length];for (int i = 0; i < values.length; i++) {newValues[i] = clearXss(values[i]);}return newValues;}/*** 处理字符转义** @param value* @return*/private String clearXss(String value) {if (value == null || "".equals(value)) {return value;}value = value.replaceAll("'","").replaceAll("\'","").replaceAll("`","")//.replaceAll("\"","“").replaceAll("<","").replaceAll(">","").replaceAll("\\(","(").replaceAll("\\)",")")//.replaceAll("&","&").replaceAll("eval","").replaceAll("java","").replaceAll("script","").replaceAll("alert","").replaceAll("prompt","");value = value.replaceAll("eval\\((.*)\\)", "");value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']","\"\"");return value;}}
下面的代码配置的过滤器必须有吗?作用是?
<filter><filter-name>XssEscape</filter-name><filter-class>com.jd.ihotel.pc.webapp.filters.XssFilter</filter-class>
</filter>
<filter-mapping><filter-name>XssEscape</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher>
</filter-mapping>

 

也可以简答粗暴不用过滤器这么写:

 

private String stripXSS(String value) {if (value != null) {value = value.replaceAll("<", "&lt;").replaceAll(">", "&gt;");value = value.replaceAll("\\(", "&#40;").replaceAll("\\)", "&#41;");value = value.replaceAll("'", "&#39;");value = value.replaceAll("eval\\((.*)\\)", "");value = value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']", "\"\"");value = value.replaceAll("script", "");value = value.replaceAll("%", "");value = value.replaceAll(";", "");}return value;
}

 

 

 

如果项目中使用了Spring框架,那么,很多过滤器都不用自己来写了,Spring为我们写好了一些常用的过滤器。下面我们就以字符编码的
过滤器CharacterEncodingFilter为例,来看一下Spring框架下,如果配置过滤器。

 
  1. <filter>

  2. <filter-name>encodingFilter</filter-name>

  3. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

  4. <init-param>

  5. <param-name>encoding</param-name>

  6. <param-value>UTF-8</param-value>

  7. </init-param>

  8. <init-param>

  9. <param-name>forceEncoding</param-name>

  10. <param-value>true</param-value>

  11. </init-param>

  12. </filter>

  13.  
  14. <filter-mapping>

  15. <filter-name>encodingFilter</filter-name>

  16. <url-pattern>/*</url-pattern>

  17. </filter-mapping>

 

 

 

CSRF:访问受信网站A并在本地产生cookie,不登出A的情况访问不受信网站B(即使浏览器关闭,A的cookie不一定立即过期或会话结束)

http://www.cnblogs.com/shanyou/p/5038794.html

1.web.xml中配置springMVC:

<servlet><servlet-name>mvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-web-config.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>

2.springMVC配置中配置拦截器

 <mvc:interceptors><mvc:interceptor><mvc:mapping path="/submitOrder.html" /><mvc:mapping path="/ihtrade/unpaidCancel.html"/><mvc:mapping path="/ihtrade/cancel.html"/><bean class="com.jd.ihtrade.core.intercepter.CheckRefferIntercepter" /></mvc:interceptor></mvc:interceptors></beans>
 

3.新建拦截器里配置的类:

 

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URI;public class CheckRefferIntercepter implements HandlerInterceptor{private Logger logger = LoggerFactory.getLogger(CheckRefferIntercepter.class);@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throwsException {String referer = request.getHeader("referer");StringBuffer requestURL = request.getRequestURL();if(referer == null || referer.isEmpty()) {return false ;}try{if (referer.contains("?")){referer = referer.substring(0, referer.indexOf("?"));}URI referUri = new URI(referer);String domain = referUri.getHost();logger.info("请求目的地URL:{}来源URL:{}验证:{}",requestURL,referer,domain);if(domain != null){if(domain.endsWith("360buy.com")|| domain.endsWith("jd.com")|| domain.endsWith("jd.net")|| domain.endsWith("jd.hk")) {return true;}}} catch (Exception e){logger.error("--invalid uri--" + referer, e);return false ;}return false ;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}

可使用拦截器验证token来避免攻击:

http://www.360doc.com/content/18/0223/11/31784658_731672172.shtml

token 是在服务端产生的。如果前端使用用户名/密码向服务端请求认证,服务端认证成功,那么在服务端会返回 token 给前端。前端可以在每次请求的时候带上 token 证明自己的合法地位。

这篇关于xss和csrf其实就是一个过滤器和一个拦截器而已:放屁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977873

相关文章

Kafka拦截器的神奇操作方法

《Kafka拦截器的神奇操作方法》Kafka拦截器是一种强大的机制,用于在消息发送和接收过程中插入自定义逻辑,它们可以用于消息定制、日志记录、监控、业务逻辑集成、性能统计和异常处理等,本文介绍Kafk... 目录前言拦截器的基本概念Kafka 拦截器的定义和基本原理:拦截器是 Kafka 消息传递的不可或缺

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤

Mybatis拦截器如何实现数据权限过滤

《Mybatis拦截器如何实现数据权限过滤》本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并... 目录背景基础知识MyBATis 拦截器介绍代码实战总结背景现在的项目负责人去年年底离职,导致前期规

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置

布隆过滤器的详解与应用

一、什么是Bloom Filter Bloom Filter是一种空间效率很高的随机数据结构,它的原理是,当一个元素被加入集合时,通过K个Hash函数将这个元素映射成一个位阵列(Bit array)中的K个点,把它们置为1。检索时,我们只要看看这些点是不是都是1就(大约)知道集合中有没有它了:如果这些点有任何一个0,则被检索元素一定不在;如果都是1,则被检索元素很可能在。这就是布隆过滤器的基本思

请解释Java Web应用中的前后端分离是什么?它有哪些好处?什么是Java Web中的Servlet过滤器?它有什么作用?

请解释Java Web应用中的前后端分离是什么?它有哪些好处? Java Web应用中的前后端分离 在Java Web应用中,前后端分离是一种开发模式,它将传统Web开发中紧密耦合的前端(用户界面)和后端(服务器端逻辑)代码进行分离,使得它们能够独立开发、测试、部署和维护。在这种模式下,前端通常通过HTTP请求与后端进行数据交换,后端则负责业务逻辑处理、数据库交互以及向前端提供RESTful

xss-labs-master通关教程

一.level1 先来进行一下代码审计 <?php ini_set("display_errors", 0);//关闭错误显示$str = $_GET["name"]; //接受URL来的get形式的name传参echo "<h2 align=center>欢迎用户".$str."</h2>";//在网页输出,并不是echo执行的,而是echo把HTML代码发送到浏览器,浏览器对发送的H

.NET 自定义过滤器 - ActionFilterAttribute

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。 代码片段: /// <summary>/// 验证 ModelState 是否有效/// </

Web安全之XSS跨站脚本攻击:如何预防及解决

1. 什么是XSS注入 XSS(跨站脚本攻击,Cross-Site Scripting)是一种常见的Web安全漏洞,通过注入恶意代码(通常是JavaScript)到目标网站的网页中,以此在用户浏览网页时执行。攻击者可以通过XSS获取用户的敏感信息(如Cookie、会话令牌)或控制用户浏览器的行为,进而造成信息泄露、身份冒用等严重后果。 2. XSS攻击类型 2.1 存储型XSS 存储型XS

【前端安全】浅谈XSS攻击和防范

定义 XSS是跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。 分类 大分类小分类原理非存储DOM型① 不需要经过服务器