サーブレット フィルターを使用したリクエスト パラメーターの変更
既存の 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 サイトの他の関連記事を参照してください。