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使用:
<filter>
<filter-name>authority</filter-name>
<filter-class>com.util.AuthorityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/pages/genbill/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>authority</filter-name>
<url-pattern>/pages/cmm/*</url-pattern>
</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 {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new NewXssHttpServletRequestWraper(
(HttpServletRequest)request), response);//对request和response进行过滤
}
@Override
public void destroy() {
}
}
新建NewXssHttpServletRequestWraper类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class NewXssHttpServletRequestWraper extends HttpServletRequestWrapper {
public NewXssHttpServletRequestWraper(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
return clearXss(super.getParameter(name));
}
@Override
public String getHeader(String name) {
return clearXss(super.getHeader(name));
}
@Override
public 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("<", "<").replaceAll(">", ">");
value = value.replaceAll("\\(", "(").replaceAll("\\)", ")");
value = value.replaceAll("'", "'");
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框架下,如果配置过滤器。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</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);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
Exception {
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 ;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public 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 证明自己的合法地位。
zz:https://blog.csdn.net/u010287873/article/details/80769762
相关推荐
今天,我们将通过对一个名为“xss+csrf+html练习源码.rar”的实战练习源码分析,深入了解这些攻击手段的工作原理和防御方法。 首先,XSS攻击是一种代码注入攻击,它允许攻击者在用户浏览器中执行恶意脚本。根据攻击...
“XSS”(Cross-Site Scripting)和“CSRF”(Cross-Site Request Forgery)是两种常见的Web应用安全漏洞。XSS允许攻击者注入恶意脚本到网页,影响用户浏览器的行为;而CSRF则利用用户的已登录状态执行非预期的操作...
2. 了解Impossible等级的XSS攻击机制和防御方法。 3. 从攻击者和受害者角度理解CSRF攻击,实施Low、Medium、High等级的CSRF攻击。 4. 学习并实践CSRF的修复措施,如使用CSRF Token等。 5. 撰写实验报告,注重规范性...
该项目是一款基于PHP的综合性安全监测平台,旨在应对XSS攻击和CSRF防御。源码包含299个文件,涵盖238个PHP脚本、21个HTML模板、15个CSS样式表、5个JavaScript脚本、2个文本文件、1个Git忽略文件、1个Markdown文档、1...
在面试中,考察 XSS 和 CSRF 的防御方法,如输入验证、输出编码、使用 Token 等。 前端发展趋势 在面试中,考察对前端发展趋势的看法,如 PWA、Serverless、AI 等技术的应用前景等。 本资源涵盖了前端工程师面试...
针对XSS攻击的防御措施,主要包括对用户输入的数据进行严格的过滤和编码,如JavaScriptEncode,确保数据被插入到HTML页面时不会被当作脚本执行。 CSRF攻击同样是一种常见的Web安全问题,它利用用户的合法身份,诱导...
主要使用Filter针对Xss攻击,sql注入,服务器访问白名单,以及csrf进行安全校验 1,主要实现的是三大块功能:Xss攻击,sql注入,服务器白名单,以及csrf 2,此Filter为真实项目部署,在XssHttpServletRequestWrapper...
以上就是基于JSP的Java Web项目中实施CSRF防御的基本流程和原理。在实际项目中,需要根据具体需求和框架来调整和完善这些措施,以确保应用的安全性。通过这样的防御机制,我们可以有效地防止攻击者利用CSRF漏洞对...
- 使用HTTPOnly Cookie:设置Cookie的HttpOnly属性,阻止JavaScript访问Cookie,减少CSRF(跨站请求伪造)和XSS的结合攻击。 - 启用Content Security Policy (CSP):通过配置CSP头部,限制浏览器只能加载指定来源...
CSRF漏洞防御主要包括四种方法:验证码防御、Referer Check防御、Anti CSRF Token防御和Token泄露。 验证码防御 验证码防御是一种非常简单而且有效的防御方法。它可以强制用户与应用程序交互,才能最终完成操作。...
- 安全编码实践,如输入验证、XSS 和 CSRF 防御,是确保应用安全的关键部分。 - SSL/TLS 加密确保了数据传输过程中的安全,防止中间人攻击。 - 用户数据加密,特别是在存储敏感信息如密码时,应使用哈希和盐值...
此外,为了保证网站的稳定运行和安全性,模板可能还考虑了代码优化、错误处理、安全防护等方面,如使用CDN加速静态资源加载,实施XSS和CSRF防御策略等。 总的来说,"22蓝橙简约集团运输物流全套网站交互动态模板"是...
8. **安全性与稳定性**:LessonControl 的源码会考虑安全措施,如输入验证、XSS 和 CSRF 防御,以及负载均衡和故障恢复策略,以确保系统的稳定运行。 9. **部署与运维**:考虑到生产环境的需求,LessonControl 可能...
- XSS 和 CSRF 防御:防止跨站脚本和跨站请求伪造攻击。 - 输入验证:避免SQL注入和其他类型的安全漏洞。 6. **部署与运维**: - Docker:容器化技术,方便应用的打包和部署。 - Kubernetes/Ansible:自动化...
源码中还应考虑安全性问题,如数据加密、XSS 和 CSRF 防御。此外,为了提高性能,可能采用了缓存策略、API 调用优化和负载均衡等技术。 8. 测试与调试 了解源码中的测试框架和测试用例,可以帮助我们理解应用的...
Vue 3 也有助于前端的 XSS 和 CSRF 防御。 这个项目结合了现代 PHP 和 JavaScript 技术,构建了一个多商户的电商平台,涉及的技术栈广泛,涵盖了后端服务、前端交互、数据库设计、安全策略等多个方面。
例如,使用中间件可以方便地实现访问日志记录、身份验证、请求速率限制、安全防护(如XSS和CSRF防御)等功能。 综上所述,JavaScript设计模式中的中间件概念是现代Web开发中的重要工具,它使得开发者能够更加专注于...
确保用户数据安全是基础,涉及SSL/TLS加密、防火墙、DDoS防护、XSS和CSRF防御、输入验证等。 11. 性能监控与日志: 通过工具如Prometheus、ELK Stack(Elasticsearch、Logstash、Kibana)进行性能监控和日志分析,...
7. **安全性**:包括但不限于DDoS防护、XSS和CSRF防御、输入验证、数据加密等,确保系统免受攻击。 在提供的文件中,“Q版服务器Release.rar”和“Q版聊天软件服务器端”可能包含了服务器端的源代码、构建文件或...