概述

功能介绍

FirewalledResponseSpring Security Web提供的一个HttpServletResponse实现,是一个带有防火墙增强安全能力的HttpServletResponse实现,被HttpFirewall对象用于对一个HttpServletResponse进行安全增强的包装器。

通过FirewalledResponse的包装,它对HttpServletResponse做了如下安全增强:

  1. 设置或者添加响应头部时,确保写入的头部值不包含\r或者\n;

    有关方法 : #setHeader,#addHeader

  2. 添加cookie时,确保写入的值不包含\r或者\n;

    有关方法 : #addCookie

  3. 重定向时,确保重定向location中不包含\r或者\n;

    有关方法 : #sendRedirect

FirewalledResponse对写入响应的值所做的增强逻辑中,如果所写入的值违反了规则,则会抛出异常IllegalArgumentException

继承关系

使用介绍

HttpFirewall的两个实现类StrictHttpFirewall,DefaultHttpFirewall都用到了FirewalledResponse,具体用法如下 :

 @Overridepublic HttpServletResponse getFirewalledResponse(HttpServletResponse response) {return new FirewalledResponse(response);}

源代码

源代码版本 : Spring Security Web 5.1.4.RELEASE

package org.springframework.security.web.firewall;import java.io.IOException;
import java.util.regex.Pattern;import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;class FirewalledResponse extends HttpServletResponseWrapper {private static final Pattern CR_OR_LF = Pattern.compile("\\r|\\n");private static final String LOCATION_HEADER = "Location";private static final String SET_COOKIE_HEADER = "Set-Cookie";public FirewalledResponse(HttpServletResponse response) {super(response);}@Overridepublic void sendRedirect(String location) throws IOException {// TODO: implement pluggable validation, instead of simple blacklisting.// SEC-1790. Prevent redirects containing CRLFvalidateCrlf(LOCATION_HEADER, location);super.sendRedirect(location);}@Overridepublic void setHeader(String name, String value) {validateCrlf(name, value);super.setHeader(name, value);}@Overridepublic void addHeader(String name, String value) {validateCrlf(name, value);super.addHeader(name, value);}@Overridepublic void addCookie(Cookie cookie) {if (cookie != null) {validateCrlf(SET_COOKIE_HEADER, cookie.getName());validateCrlf(SET_COOKIE_HEADER, cookie.getValue());validateCrlf(SET_COOKIE_HEADER, cookie.getPath());validateCrlf(SET_COOKIE_HEADER, cookie.getDomain());validateCrlf(SET_COOKIE_HEADER, cookie.getComment());}super.addCookie(cookie);}void validateCrlf(String name, String value) {if (hasCrlf(name) || hasCrlf(value)) {throw new IllegalArgumentException("Invalid characters (CR/LF) in header " + name);}}private boolean hasCrlf(String value) {return value != null && CR_OR_LF.matcher(value).find();}
}

参考文章

  • Spring Security Web : Web安全过滤器链代理对象 FilterChainProxy
  • Spring Security Web : StrictHttpFirewall HTTP防火墙(严格模式)
  • Spring Security Web : DefaultHttpFirewall HTTP防火墙(缺省模式)
  • Spring Security Web : 概念模型接口 HttpFirewall

Spring Security Web : FirewalledResponse 经过防火墙加强安全的响应相关推荐

  1. Spring Security Web : AbstractAuthenticationTargetUrlRequestHandler

    概述 AbstractAuthenticationTargetUrlRequestHandler是Spring Security Web提供的一个抽象类,它主要实现了这样一种策略 : 认证动作成功时使 ...

  2. Spring Security Web : DefaultWebSecurityExpressionHandler 缺省Web安全表达式处理器

    概述 DefaultWebSecurityExpressionHandler是Spring Security Web用于Web安全表达式处理器(handler).它会基于一组缺省配置,和当时的环境,对 ...

  3. 在15分钟内使用Spring Boot和Spring Security构建一个Web应用程序

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 开发人员 ...

  4. Spring Security OAuth2.0认证授权知识概括

    Spring Security OAuth2.0认证授权知识概括 安全框架基本概念 基于Session的认证方式 Spring Security简介 SpringSecurity详解 分布式系统认证方 ...

  5. Spring Security 参考手册(一)

    Spring Security 参考手册 Ben AlexLuke TaylorRob WinchGunnar Hillert Spring security 是一个强大的和高度可定制的身份验证和访问 ...

  6. 8.Spring security中的HttpFirewall

    文章目录 *`HttpFirewall`* *8.1`HttpFirewall`简介* *8.2`HttpFirewall`严格模式* *8.2.1`rejectForbiddenHttpMethod ...

  7. Spring Security中文文档

    Spring Security中文文档 来源:https://www.springcloud.cc/spring-security.html#overall-architecture 作者 Ben A ...

  8. Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】

    源码请移步至: https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc ...

  9. Spring Security 实战:Spring Boot 下的自动配置

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1. 前言 我们在前几篇 ...

最新文章

  1. ACNO.15猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再
  2. JSP的基本构成详解
  3. C++中申请内存的正确方法
  4. nginx+upsync+consul 构建动态nginx配置系统
  5. linux下面navicat调整字体
  6. 消息队列面试 - 如何保证消息队列的高可用?
  7. mysql下载环境_windows下安装mysql需要什么环境
  8. js 判断是否是 整数
  9. 广告传媒实际税负怎么计算_传媒宣传业增值税税负多少
  10. 数据集:工人与机床对日产量的影响
  11. 2015校招某度WEB前端笔试题
  12. AsposeWord转pdf的正确姿势
  13. MySQL5.7源码在MacOS+Clion上的单步调试
  14. [转]Sublime Text 2 设置文件详解
  15. SpinalNet: Deep Neural Network with Gradual Input
  16. layui数据表格中包含图片的处理方式
  17. SSL证书的加密算法有哪些?
  18. 脚注交叉引用序号不一样_学会Word交叉引用,再也不用一个一个改编号了
  19. Dynamics 365 FO学习笔记
  20. 机动车排放微观控制-汽油机内净化技术

热门文章

  1. 【Java】StudentsInfoQuery(简单的学生信息查询系统)
  2. “数据”到底是资产还是负债?
  3. 火车头采集之采集规则编写
  4. 基于扩张状态观测器eso扰动补偿和权重因子调节的电流预测控制,相比传统方法,增加了参数鲁棒性
  5. 怎样快速解决EDIUS中文件无法打开问题
  6. 蚂蜂窝 VP 都斌:1.2 亿用户背后的数据驱动
  7. Android 62 自制域名解析 服务 花生壳太贵
  8. 谈谈前端角度出发做好SEO需要考虑什么?
  9. Java 求a+b的值
  10. 巴菲特的获利秘诀——“5+12+8+2”