Heim  >  Artikel  >  Java  >  Wie ändere ich Anforderungsparameter mit einem Servlet-Filter, wenn Änderungen am Quellcode verboten sind?

Wie ändere ich Anforderungsparameter mit einem Servlet-Filter, wenn Änderungen am Quellcode verboten sind?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 06:21:02175Durchsuche

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

Anforderungsparameter mit Servlet-Filter ändern

In einer vorhandenen Webanwendung sind Sie mit einer XSS-Sicherheitslücke konfrontiert und dürfen die Quelle nicht ändern Code. Um dieses Problem zu beheben, beabsichtigen Sie, einen Servlet-Filter zu verwenden, um Anforderungsparameter zu bereinigen, bevor sie die anfällige Seite erreichen.

Das bereitgestellte Codebeispiel demonstriert Ihre Filterklasse, 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>

Allerdings , Sie sind auf ein Hindernis gestoßen: HttpServletRequest fehlt die setParameter-Methode. Um diese Einschränkung zu überwinden, ziehen Sie die folgenden Ansätze in Betracht:

Verwenden von HttpServletRequestWrapper:

Verwenden Sie die HttpServletRequestWrapper-Klasse, um einen Wrapper um die ursprüngliche Anfrage zu erstellen. Sie können die getParameter-Methode überschreiben, um den bereinigten Wert zurückzugeben. Übergeben Sie dann die verpackte Anfrage an chain.doFilter anstelle des Originals.

Dieser Ansatz erfordert eine Unterklassenbildung und verpackt die ursprüngliche Anfrage, entspricht jedoch der Servlet-API, indem die Filterung an die verpackte Anfrage delegiert wird.

Anforderungsattribut festlegen:

Alternativ können Sie das Ziel-Servlet oder die Ziel-JSP so ändern, dass für den gefährlichen Parameter ein Anforderungsattribut anstelle eines Anforderungsparameters erwartet wird. Ihr Filter kann dann den Parameter untersuchen, bereinigen und das Anforderungsattribut mit request.setAttribute auf den bereinigten Wert setzen.

Diese Methode ist eleganter, da sie Unterklassen oder Spoofing vermeidet, aber Änderungen am Code der Anwendung erfordert um das Anforderungsattribut anstelle des Parameters zu verwenden.

Das obige ist der detaillierte Inhalt vonWie ändere ich Anforderungsparameter mit einem Servlet-Filter, wenn Änderungen am Quellcode verboten sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn