tomcat容器提供的过滤器Filters【译】
时间:2015-10-06 22:52 来源:www.it.net.cn 作者:IT网
目录[-]
-
介绍
-
AddDefaultCharsetFilter
-
说明
-
Filter Class Name
-
初始化参数
-
CorsFilter
-
介绍
-
Filter Class Name
-
初始化参数
-
CORSFilter 和 HttpServletRequest attributes
-
CsrfPreventionFilter
-
说明
-
Filter Class Name
-
初始化参数
-
ExpiresFilter
-
FailedRequestFilter
-
介绍
-
Filter Class Name
-
HttpHeaderSecurityFilter
-
介绍
-
Filter Class Name
-
初始化参数
-
RemoteAddrFilter
-
RemoteHostFilter
-
RemoteIpFilter
-
RequestDumperFilter
-
介绍
-
Filter Class Name
-
简单的配置
-
SetCharacterEncodingFilter
-
介绍
-
Filter Class Name
-
初始化参数
-
WebdavFixFilter
-
介绍
-
Filter Class Name
介绍
Tomcat默认提供了许多可用于Web应用程序的过滤器,可以通过tomcat的$CATALINA_BASE/conf/web.xml或通过在单个Web应用程序WEB-INF/web.xml中配置他们 。
下面将对每个过滤器进行详细说明。
*注意变量$CATALINA_BASE可以理解为tomcat的路径
AddDefaultCharsetFilter
说明
HTTP规范指出,如果没有指定"text"(文本)的字符集那么它将默认使用ISO-8859-1字符集。 然而浏览器可能试图自动检测字符集。
这可能被攻击者利用来进行XSS攻击。IE浏览器已经默认这种行为。其他浏览器有一个选项来启用它。
该过滤器将强制使用用户设置的字符集来阻止浏览器的的字符集检测,从而防止XSS攻击。
Filter Class Name
org.apache.catalina.filters.AddDefaultCharsetFilter
初始化参数
参数
说明
encoding
如果没有明确的设置一个Servlet的字符集,应设置它。此参数有两个特殊值default和system。system使用JVM默认字符集,default将使用ISO-8859-1。
CorsFilter
介绍
该过滤器是W3C的CORS(跨域资源共享)规范的实现,这是一个跨域请求机制。
该过滤器的工作原理是将所需的Access-Control-*headers添加到HttpServletResponse。该过滤器还可以防止HTTP Response Splitting攻击。 如果请求无效或是不允许的,那么请求被拒绝,HTTP状态代码403(禁止)。这里是官方的过滤器请求处理
Filter Class Name
org.apache.catalina.filters.CorsFilter
下面是该过滤器所需的最小的配置:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
初始化参数
参数
说明
cors.allowed.origins
被允许访问的请求。*表示任何来源。 用逗号分割的白名单域名。 例如:http://www.w3.org, https://www.apache.org 默认: * (允许任何请求)。
cors.allowed.methods
被允许访问的HTTP方法,逗号分割。这些方法也将被添加到Access-Control-Allow-Methods响应头中。 例如:GET, POST 默认值:GET, POST, HEAD, OPTIONS
cors.allowed.headers
被允许访问的请求头,逗号分割。这些头也将被添加到Access-Control-Allow-Headers响应头中。 如: Origin,Accept 默认值: Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers
cors.exposed.headers
浏览器可以访问的请求头。这些头也将被添加到Access-Control-Expose-Headers响应头中。例如:X-CUSTOM-HEADER-PING,X-CUSTOM-HEADER-PONG 。缺省情况:无。 非简单的头信息默认情况下不外露。
cors.preflight.maxage
秒,浏览器被允许的缓存结果。将会暴露在Access-Control-Max-Age响应头中。负值将阻止CORS过滤添加这个响应头。 默认:1800
cors.support.credentials
一个标志,标示是否支持用户凭据。将会暴露在Access-Control-Allow-Credentials响应头中。它有助于浏览器判断是否实际请求可以使用证书进行 默认:true
cors.request.decorate
标示是否CORS特定的属性应该添加到HttpServletRequest对象。默认值:true
一个完整的例子:
<filter>
<filter-name>CorsFilter</filter-name>
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
<param-name>cors.allowed.origins</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.methods</param-name>
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
</init-param>
<init-param>
<param-name>cors.allowed.headers</param-name>
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
</init-param>
<init-param>
<param-name>cors.exposed.headers</param-name>
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
</init-param>
<init-param>
<param-name>cors.support.credentials</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>cors.preflight.maxage</param-name>
<param-value>10</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CorsFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
CORSFilter 和 HttpServletRequest attributes
CORSFilter添加请求有关信息在HttpServletRequest对象中。如果cors.request.decorate初始化参数为true :
-
cors.isCorsRequest: 标示是否CORS请求.
-
cors.request.origin: The Origin URL, i.e. the URL of the page from where the request originated.
-
cors.request.type: CORS请求类型。可能的值:
-
SIMPLE: A request which is not preceded by a pre-flight request.
-
ACTUAL: A request which is preceded by a pre-flight request.
-
PRE_FLIGHT: A pre-flight request.
-
NOT_CORS: A normal same-origin request.
-
INVALID_CORS: A cross-origin request, which is invalid.
-
cors.request.headers: Request headers sent as Access-Control-Request-Headers header, for a pre-flight request.
CsrfPreventionFilter
说明
该过滤器提供了一个Web应用程序的基本保障。假定它被映射到/*和所有的URL返回给客户机经由调用编码HttpServletResponse#encodeRedirectURL(String)或HttpServletResponse#encodeURL(String) 。
该过滤器通过产生一个随机数并将其存储在会话中,防止CSRF攻击。URL也编码有相同的随机数。 当接收到下一个请求中的请求的随机数进行比较,以在会话随机数且仅当它们是相同的是允许继续请求。
Filter Class Name
org.apache.catalina.filters.CsrfPreventionFilter
初始化参数
参数
说明
denyStatus
请求被拒绝时使用HTTP响应状态代码。默认值是403。
entryPoints
一个逗号隔开不会为一个有效的随机数的存在测试的URL列表。 它们被用来提供一种具有导航离开后导航回到受保护的应用程序。 入口点将被限制为HTTP GET请求,并且不应触发任何安全敏感操作。
nonceCacheSize
将被缓存在一个LRU基础以支持并行请求,有限使用的刷新和背面在浏览器和类似的行为可能导致在提交之前的临时值,而不是当前的先前发出随机数的数量。 如果未设置,5缺省值将被使用。
randomClass
使用类的名称来生成随机数。这个类必须是一个实例java.util.Random。如果未设置,默认值java.security
ExpiresFilter
可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
FailedRequestFilter
介绍
该过滤器触发参数解析的请求和拒绝的请求,如果一些参数,因为分析错误或请求大小限制(如参数解析过程中跳过maxParameterCount的属性连接器 )。 此过滤器可用于确保提交的客户none参数值都将丢失。
需要注意的是参数解析可能会占用一个HTTP请求的主体,因此,如果此过滤器保护的servlet使用需要谨慎request.getInputStream()或request.getReader()的调用。 一般通过将该过滤器断裂的Web应用程序的风险是不那么高,因为参数解析时消耗请求体之前检查请求的内容类型。
请注意,对于POST请求被正确解析,一个SetCharacterEncodingFilter滤波器必须高于这一配置。 见的characterEncoding页中的常见问题的详细信息。
该请求被拒绝,HTTP状态代码400(错误请求)。
Filter Class Name
org.apache.catalina.filters.FailedRequestFilter
HttpHeaderSecurityFilter
介绍
有一个数字,可以被添加到所述响应,以改善连接的安全性的HTTP标头。 该过滤器提供了一种机制,将这些头。 注意有更多要求的是安全性相关的头,像CORS,被implemted作为单独的过滤器。
Filter Class Name
org.apache.catalina.filters.HttpHeaderSecurityFilter
初始化参数
参数
说明
hstsEnabled
将一个HTTP严格传输安全(HSTS)头( Strict-Transport-Security )来对安全请求的响应集。任何HSTS头已经存在将被替换。 请参见RFC 6797的HSTS的进一步细节。如果没有指定,默认值为true
hstsMaxAgeSeconds
应该在HSTS头中使用的最大年龄值。负值将被视为零。如果未指定,默认值0
hstsIncludeSubDomains
应的includeSubDomains参数被包括在HSTS头。如果未指定,默认值false
antiClickJackingEnabled
如果反点击顶头部( X-Frame-Options )的响应进行设置。任何反点击顶头部已经存在将被替换。如果没有指定,默认值为true
antiClickJackingOption
必须是一个DENY,SAMEORIGIN ,ALLOW-FROM(不区分大小写)。如果未指定,默认值DENY
antiClickJackingUri
如果将允许-FROM用于antiClickJackingOption,什么URI应该被允许? 如果未指定,默认值一个空字符串
blockContentTypeSniffingEnabled
要阻止的内容类型嗅探(头X-Content-Type-Options )对每个响应进行设置。 如果已经存在,则报头将被替换。 如果没有指定,默认值为true
RemoteAddrFilter
远程地址过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RemoteHostFilter
远程host过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RemoteIpFilter
远程IP过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文!
RequestDumperFilter
介绍
该过滤器从请求和响应中获取详细信息,目的是方便调试。
警告:使用此过滤器有副作用这个过滤器输出包括请求的任何参数。该参数将使用默认的平台编码进行解码。任何后续调用request.setCharacterEncoding()在Web应用程序中不会有任何效果。
Filter Class Name
org.apache.catalina.filters.RequestDumperFilter
简单的配置
可以在程序的web.xml中或者tomcat的$CATALINA_BASE/conf/web.xml中配置它。
<filter>
<filter-name>requestdumper</filter-name>
<filter-class>
org.apache.catalina.filters.RequestDumperFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>requestdumper</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
在tomcat`$CATALINA_BASE/conf/logging.properties中添加一个专用的日志记录
# To this configuration below, 1request-dumper.org.apache.juli.FileHandler
# also needs to be added to the handlers property near the top of the file
1request-dumper.org.apache.juli.FileHandler.level = INFO
1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1request-dumper.org.apache.juli.FileHandler.prefix = request-dumper.
1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
org.apache.catalina.filters.RequestDumperFilter.level = INFO
org.apache.catalina.filters.RequestDumperFilter.handlers = \
1request-dumper.org.apache.juli.FileHandler
SetCharacterEncodingFilter
介绍
用户代理不总是包含字符编码请求的信息。根据请求判断是否处理,默认ISO-8859-1并不是我们期望的。这个过滤器提供了强制设置的编码。本质上,这要求过滤器调用ServletRequest.setCharacterEncoding()方法。
该过滤器应该在POST请求解析之前被调用,因此,过滤器的顺序很重要。请注意,对于GET请求的编码此处未设置,请在页面请求中设置字符集!
Filter Class Name
org.apache.catalina.filters.SetCharacterEncodingFilter
初始化参数
参数
说明
encoding
字符集
ignore
确定由用户代理指定的任何字符编码是否被忽略。如果为true,由用户代理提供的任何值将被忽略。如果假的,编码是唯一设置,如果用户代理没有指定的编码。默认值是false
WebdavFixFilter
介绍
微软操作系统有两个WebDAV客户端。一个是用于与端口80,另一个用于所有其他端口。试图与Tomcat的WebDAV的Servlet来交流的时候用端口80用于实现不坚持WebDAV规范和失败。该过滤器为此提供了一个修复通过强制使用WebDAV实现,通过端口80的连接。
Filter Class Name
org.apache.catalina.filters.WebdavFixFilter
*注意:tomcat版本Version 7.0.63
原文地址:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html
(责任编辑:IT)
目录[-]
介绍Tomcat默认提供了许多可用于Web应用程序的过滤器,可以通过tomcat的$CATALINA_BASE/conf/web.xml或通过在单个Web应用程序WEB-INF/web.xml中配置他们 。 下面将对每个过滤器进行详细说明。 *注意变量$CATALINA_BASE可以理解为tomcat的路径 AddDefaultCharsetFilter说明HTTP规范指出,如果没有指定"text"(文本)的字符集那么它将默认使用ISO-8859-1字符集。 然而浏览器可能试图自动检测字符集。 这可能被攻击者利用来进行XSS攻击。IE浏览器已经默认这种行为。其他浏览器有一个选项来启用它。 该过滤器将强制使用用户设置的字符集来阻止浏览器的的字符集检测,从而防止XSS攻击。 Filter Class Nameorg.apache.catalina.filters.AddDefaultCharsetFilter 初始化参数
CorsFilter介绍该过滤器是W3C的CORS(跨域资源共享)规范的实现,这是一个跨域请求机制。
该过滤器的工作原理是将所需的Access-Control-*headers添加到HttpServletResponse。该过滤器还可以防止HTTP Response Splitting攻击。 如果请求无效或是不允许的,那么请求被拒绝,HTTP状态代码403(禁止)。这里是官方的过滤器请求处理 Filter Class Nameorg.apache.catalina.filters.CorsFilter 下面是该过滤器所需的最小的配置: <filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 初始化参数
一个完整的例子: <filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>*</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value> </init-param> <init-param> <param-name>cors.exposed.headers</param-name> <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> </init-param> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>cors.preflight.maxage</param-name> <param-value>10</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> CORSFilter 和 HttpServletRequest attributesCORSFilter添加请求有关信息在HttpServletRequest对象中。如果cors.request.decorate初始化参数为true :
CsrfPreventionFilter说明该过滤器提供了一个Web应用程序的基本保障。假定它被映射到/*和所有的URL返回给客户机经由调用编码HttpServletResponse#encodeRedirectURL(String)或HttpServletResponse#encodeURL(String) 。 该过滤器通过产生一个随机数并将其存储在会话中,防止CSRF攻击。URL也编码有相同的随机数。 当接收到下一个请求中的请求的随机数进行比较,以在会话随机数且仅当它们是相同的是允许继续请求。 Filter Class Nameorg.apache.catalina.filters.CsrfPreventionFilter 初始化参数
ExpiresFilter可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! FailedRequestFilter介绍该过滤器触发参数解析的请求和拒绝的请求,如果一些参数,因为分析错误或请求大小限制(如参数解析过程中跳过maxParameterCount的属性连接器 )。 此过滤器可用于确保提交的客户none参数值都将丢失。 需要注意的是参数解析可能会占用一个HTTP请求的主体,因此,如果此过滤器保护的servlet使用需要谨慎request.getInputStream()或request.getReader()的调用。 一般通过将该过滤器断裂的Web应用程序的风险是不那么高,因为参数解析时消耗请求体之前检查请求的内容类型。 请注意,对于POST请求被正确解析,一个SetCharacterEncodingFilter滤波器必须高于这一配置。 见的characterEncoding页中的常见问题的详细信息。 该请求被拒绝,HTTP状态代码400(错误请求)。 Filter Class Nameorg.apache.catalina.filters.FailedRequestFilter HttpHeaderSecurityFilter介绍有一个数字,可以被添加到所述响应,以改善连接的安全性的HTTP标头。 该过滤器提供了一种机制,将这些头。 注意有更多要求的是安全性相关的头,像CORS,被implemted作为单独的过滤器。 Filter Class Nameorg.apache.catalina.filters.HttpHeaderSecurityFilter 初始化参数
RemoteAddrFilter远程地址过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RemoteHostFilter远程host过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RemoteIpFilter远程IP过滤器,不过多解释,可采用高性能的nginx来替换tomcat的实现。若感兴趣可以参考原文! RequestDumperFilter介绍该过滤器从请求和响应中获取详细信息,目的是方便调试。 警告:使用此过滤器有副作用这个过滤器输出包括请求的任何参数。该参数将使用默认的平台编码进行解码。任何后续调用request.setCharacterEncoding()在Web应用程序中不会有任何效果。 Filter Class Nameorg.apache.catalina.filters.RequestDumperFilter 简单的配置可以在程序的web.xml中或者tomcat的$CATALINA_BASE/conf/web.xml中配置它。 <filter> <filter-name>requestdumper</filter-name> <filter-class> org.apache.catalina.filters.RequestDumperFilter </filter-class> </filter> <filter-mapping> <filter-name>requestdumper</filter-name> <url-pattern>*</url-pattern> </filter-mapping> 在tomcat`$CATALINA_BASE/conf/logging.properties中添加一个专用的日志记录 # To this configuration below, 1request-dumper.org.apache.juli.FileHandler # also needs to be added to the handlers property near the top of the file 1request-dumper.org.apache.juli.FileHandler.level = INFO 1request-dumper.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1request-dumper.org.apache.juli.FileHandler.prefix = request-dumper. 1request-dumper.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter org.apache.catalina.filters.RequestDumperFilter.level = INFO org.apache.catalina.filters.RequestDumperFilter.handlers = \ 1request-dumper.org.apache.juli.FileHandler SetCharacterEncodingFilter介绍用户代理不总是包含字符编码请求的信息。根据请求判断是否处理,默认ISO-8859-1并不是我们期望的。这个过滤器提供了强制设置的编码。本质上,这要求过滤器调用ServletRequest.setCharacterEncoding()方法。 该过滤器应该在POST请求解析之前被调用,因此,过滤器的顺序很重要。请注意,对于GET请求的编码此处未设置,请在页面请求中设置字符集! Filter Class Nameorg.apache.catalina.filters.SetCharacterEncodingFilter 初始化参数
WebdavFixFilter介绍微软操作系统有两个WebDAV客户端。一个是用于与端口80,另一个用于所有其他端口。试图与Tomcat的WebDAV的Servlet来交流的时候用端口80用于实现不坚持WebDAV规范和失败。该过滤器为此提供了一个修复通过强制使用WebDAV实现,通过端口80的连接。 Filter Class Nameorg.apache.catalina.filters.WebdavFixFilter *注意:tomcat版本Version 7.0.63 原文地址:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html (责任编辑:IT) |