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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 06:21:02228ブラウズ

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

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

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

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

<code class="java">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) {
  }
}</code>

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

HttpServletRequestWrapper の使用:

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

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

リクエスト属性の設定:

または、危険なパラメータのリクエスト パラメータではなくリクエスト属性を期待するようにターゲット サーブレットまたは JSP を変更することもできます。その後、フィルターはパラメーターを調べてサニタイズし、request.setAttribute を使用してサニタイズされた値でリクエスト属性を設定できます。

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

以上がソース コードの変更が禁止されている場合にサーブレット フィルターを使用してリクエスト パラメーターを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。