サーブレットフィルターを使用したリクエストパラメータの変更
問題:
セキュリティ脆弱性 (XSS) Tomcat 4.1 でホストされている既存の Web アプリケーションに存在します。ソース コードの変更には制限があるため、サーブレット フィルターは、機密パラメータを脆弱なページに渡す前にサニタイズすることが検討されています。ただし、ServletRequest インターフェイスには、パラメーター値を変更するための setParameter メソッドがありません。
解決策:
オプション 1: HttpServletRequestWrapper サブクラス
HttpServletRequest には必要なメソッドがありませんが、HttpServletRequestWrapper クラスを使用すると、あるリクエストを別のリクエストでラッピングできます。このクラスをサブクラス化し、getParameter メソッドをオーバーライドすることで、サニタイズされたパラメータ値を返すことができます。この変更されたリクエストは、元のリクエストの代わりにフィルター チェーンに渡すことができます。
コード スニペット:
<code class="java">import javax.servlet.*; import javax.servlet.http.*; public class XssFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // Create a wrapped request with sanitized parameter HttpServletRequest wrappedRequest = new HttpServletRequestWrapper((HttpServletRequest) request) { @Override public String getParameter(String parameterName) { String originalValue = super.getParameter(parameterName); return sanitize(originalValue); } }; chain.doFilter(wrappedRequest, response); } ... }</code>
オプション 2: リクエスト属性を使用する
より洗練されたアプローチには、パラメータではなくリクエスト属性を期待するように脆弱なサーブレットまたは JSP を変更することが含まれます。フィルターはパラメーターを検査し、必要な変更を加え、request.setAttribute() を使用してサニタイズされた値を属性として設定します。
JSP のコード スニペット:
<code class="jsp"><jsp:useBean id="myBean" ...> <jsp:setProperty name="myBean" property="sanitizedParam" value="${requestScope['sanitizedParam']}" /></code>
サーブレットのコード スニペット:
<code class="java">import javax.servlet.*; import javax.servlet.http.*; public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Retrieve the sanitized parameter from the attribute String sanitizedParam = (String) request.getAttribute("sanitizedParam"); } }</code>
メモ:
以上がセキュリティ強化のためにサーブレット フィルタのリクエスト パラメータを変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。