使用Servlet Filter修改請求參數
使用Servlet Filter修改請求參數
在現有的Web應用程式中,您面臨XSS漏洞,並被禁止修改原始碼。為了解決這個問題,您打算利用 servlet 過濾器在請求參數到達易受攻擊的頁面之前對其進行清理。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) {
}
}
import java.io.*;
導入 javax.servlet.*;
公共最終類別 XssFilter 實作 Filter {
public void doFilter(ServletRequest 請求, ServletResponse 回應, FilterChain 鏈)
拋出 IOException、ServletException
{
String badValue = request.getParameter("dangerousParamName");
字串 goodValue = 清理(badValue);
// 無法使用request.setParameter修改參數
chain.doFilter(請求,回應);
}
公共無效銷毀(){
}
公共無效初始化(FilterConfig過濾器配置){
}
}但是,您遇到了一個障礙:HttpServletRequest 缺少 setParameter 方法。若要克服此限制,請考慮以下方法:
使用 HttpServletRequestWrapper:
使用 HttpServletRequestWrapper:
利用 HttpServletRequestWrapper 類別圍繞原始請求建立包裝器。您可以重寫 getParameter 方法以傳回清理後的值。然後,將包裝後的請求傳遞給 chain.doFilter 而不是原始請求。 此方法需要子類化並包裝原始請求,但透過將過濾委託給包裝後的請求來符合 servlet API。設定請求屬性:
或者,您可以修改目標 servlet 或 JSP 以期望請求屬性比危險參數的請求參數。然後,您的過濾器可以檢查參數,對其進行清理,並使用 request.setAttribute.使用清理後的值來設定請求屬性。此方法更優雅,因為它避免了子類化或欺騙,但需要修改應用程式的程式碼使用請求屬性而不是參數。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3