サーブレット フィルターを使用したリクエスト パラメーターの変更
既存の 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