public class ContentTypeLengthLimitFilter extends Object implements javax.servlet.Filter
commons-fileuploadの脆弱性CVE-2014-0050(無限ループ。commons-fileupload-1.3.1で修正済)を突くDoS攻撃、
および、その類似手段によるDoS攻撃(処理効率を著しく低下させる。commons-fileupload-1.3.1でも未修正)から、
システムを守るためのフィルタ。
Content-Typeのバイト数のチェックを行い、
特定サイズを超えていた場合にServletExceptionをスローすることで、
commons-fileuploadの電文解析処理にDoS攻撃用電文を解析させないようにする。
StrutsやSpring等のフレームワークがcommons-fileuploadに解析を委譲するのは、
「リクエストによって実行される業務APがファイルアップロード機能を使用するとき」ではなく、
「リクエストがマルチパート形式のとき」であるため、フィルタマッピングは、
ファイルアップロード機能を利用するパスだけではなく、フレームワークのServletをマッピングしているパス全体(「*.do」等)にマッピングする必要がある。
このクラスは、
処理効率を著しく低下させるDoS攻撃から、
commons-fileuploadが自らの機能で防御できるようになるまでの間、
一時的に回避策を提供するためのものである。
将来のcommons-fileuploadのバージョンアップ後、このクラスでContent-Typeのサイズを制限せずに、
commons-fileupload自身の機能で制限をかけることを考慮し、
Content-Typeのサイズオーバー時は、固有のエラー画面ではなく、
汎用のエラー画面に遷移するよう設定することを推奨する。
(そのために、このフィルタからスローする例外には、固有の例外ではなく、ServletExceptionを使用している。)
<filter>
<filter-name>contentTypeLengthLimitFilter</filter-name>
<filter-class>jp.terasoluna.fw.web.common.filter.ContentTypeLengthLimitFilter</filter-class>
<init-param>
<param-name>limitBytes</param-name>
<param-value>2048</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>contentTypeLengthLimitFilter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/error.jsp</location>
</error-page>
コンストラクタと説明 |
---|
ContentTypeLengthLimitFilter() |
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse res, javax.servlet.FilterChain chain) throws IOException, javax.servlet.ServletException
doFilter
インタフェース内 javax.servlet.Filter
req
- HTTPリクエストres
- HTTPレスポンスchain
- フィルタチェーンIOException
- I/Oエラーjavax.servlet.ServletException
- サーブレット例外Filter.doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain)
public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException
init
インタフェース内 javax.servlet.Filter
config
- FilterConfigインスタンス。javax.servlet.ServletException
- 初期化異常時にスローされる例外。Filter.init(javax.servlet.FilterConfig)
public void destroy()
destroy
インタフェース内 javax.servlet.Filter
Filter.destroy()
Copyright © 2014. All Rights Reserved.