2016-09-22 1 views
0

Wir unterhalb Aussage haben in Java-Code:seine Verwendung von HttpServletResponse.setHeader (...) könnte verwendet werden, CRLF-Zeichen enthalten

response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); 

Aufgrund dieser Tatsache findbugs wird unter Warnung zu erzeugen:

[INFO] This use of HttpServletResponse.setHeader(...) might be used to include CRLF characters into HTTP headers HTTP_RESPONSE_SPLITTING 

Gibt es eine Möglichkeit, diese Warnung zu beheben?

private String safeHttpHeader(String value) { 
    String result = ""; 
    if (value != null) { 
     char[] chars = value.toCharArray(); 
     StringBuilder buffer = new StringBuilder(chars.length); 
     for (int i = 0; i < chars.length; i++) { 
      switch (chars[i]) { 
      case '\r': 
       buffer.append('%'); 
       buffer.append('0'); 
       buffer.append('D'); 
       break; 
      case '\n': 
       buffer.append('%'); 
       buffer.append('0'); 
       buffer.append('A'); 
       break; 
      default: 
       buffer.append(chars[i]); 
       break; 
      } 
     } 
     result = buffer.toString(); 
    } 
    return result; 
} 

Statement

response.setHeader("Content-Disposition", safeHttpHeader("attachment; filename=\"" + dbFile.getFilename() + "\"")); 

Hoffe, es hilft:

+0

ist filename ein Anforderungsparameter? – MeBigFatGuy

Antwort

0

Das obige Problem wird durch die Verwendung unten Funktion aufgelöst.

0

Sie können den URI(String scheme, String ssp, String fragment)-Konstruktor verwenden, um den Dateinamen zu codieren, und dann den raw Scheme-Specific part extrahieren.

Zum Beispiel:

response.setHeader("Content-Disposition", "attachment; filename=\"" 
    + new URI("http", fileName, null).getRawSchemeSpecificPart() + "\""); 

Hier ist ein Beispielprogramm:

public static void main(String[] args) throws Exception { 
    URI uri = new URI("http", "\r\n", null); 
    System.out.println(uri.getRawSchemeSpecificPart()); 
} 

Welche folgende Ausgabe:

%0D%0A 
Verwandte Themen