「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ソース コードの変更が禁止されている場合にサーブレット フィルターを使用してリクエスト パラメーターを変更する方法

ソース コードの変更が禁止されている場合にサーブレット フィルターを使用してリクエスト パラメーターを変更する方法

2024 年 12 月 21 日に公開
ブラウズ:810

How to Modify Request Parameters with a Servlet Filter When Source Code Changes Are Forbidden?

サーブレット フィルターを使用したリクエスト パラメーターの変更

既存の Web アプリケーションでは XSS 脆弱性に直面しており、ソースの変更が禁止されていますコード。この問題に対処するには、サーブレット フィルターを利用して、リクエスト パラメーターが脆弱なページに到達する前にサニタイズする予定です。

提供されたコード サンプルは、フィルター クラス XssFilter:

import java.io.*;
import javax.servlet.*;

public final class XssFilter implements Filter {

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
      throws IOException, ServletException
  {
    String badValue = request.getParameter("dangerousParamName");
    String goodValue = sanitize(badValue);
    // Unable to modify parameter using request.setParameter
    chain.doFilter(request, response);
  }

  public void destroy() {
  }

  public void init(FilterConfig filterConfig) {
  }
}

しかし、障害に遭遇しました。HttpServletRequest には setParameter メソッドがありません。この制限を克服するには、次のアプローチを検討してください。

HttpServletRequestWrapper の使用:

HttpServletRequestWrapper クラスを利用して、元のリクエストの周囲にラッパーを作成します。 getParameter メソッドをオーバーライドして、サニタイズされた値を返すことができます。次に、ラップされたリクエストを元のリクエストではなくchain.doFilterに渡します。

このアプローチではサブクラス化が必要で、元のリクエストをラップしますが、ラップされたリクエストにフィルタリングを委任することでサーブレット API に準拠します。

リクエスト属性の設定:

または、ターゲットのサーブレットまたは JSP を変更することもできます危険なパラメータとしてリクエスト パラメータではなくリクエスト属性を期待する場合。その後、フィルターはパラメーターを検査し、それをサニタイズし、request.setAttribute.

を使用してサニタイズされた値でリクエスト属性を設定できます。このメソッドはサブクラス化やスプーフィングを回避するためより洗練されていますが、アプリケーションのコードの変更が必要です。パラメータの代わりにリクエスト属性を使用します。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3