2015-10-22 13 views
8

Als Reaktion auf eine Anfrage mit einem Cookie, das ein Nicht-ASCII-Zeichen enthält, scheint ColdFusion 11 abzustürzen. IIS 8.5 gibt einen HTTP 500 Internal Server Error (leere weiße Seite) zurück.ColdFusion 11 - 500 Interner Serverfehler von Nicht-ASCII-Cookie-Zeichen

Schritte zum Reproduzieren:

  1. Führen Sie den folgenden in Javascript-Konsole und versuchen werden, CFML-Seite zu laden: document.cookie="a=ñ";

  2. (Optional) Fordern Sie .html oder .txt-Datei und erhalten normale Antwort.

  3. Fordern Sie eine Seite ColdFusion an und erhalten Sie eine leere weiße Seite, HTTP 500 Internal Server Error.

  4. Die einzige Problemumgehung besteht darin, Browser-Cookies zu löschen.

Umwelt:

  • Windows Server 2012 R2 Standard
  • IIS 8.5
  • Cold Fusion 11 (Standard)
  • Alle OS und Software neuesten gepatchten Versionen ausgeführt wird.

Ich habe versucht, -Dfile.encoding=UTF-8 zu den Java-Argumenten hinzuzufügen.

Ich habe niemanden gefunden, der auf dieses Problem bei ColdFusion stieß. Es gibt similar issues mit Java-Code auf Tomcat. Da ColdFusion 11 jedoch mit Tomcat ausgeliefert wird, weiß ich nicht einmal, welche Version von Tomcat läuft und wie es aktualisiert wird. (Es scheint, dass ColdFusion 10 Tomcat 7 ausführt.) Adobe scheint keine Dokumentation über die Tomcat-Ebene von ColdFusion 11 zu haben (speziell, wie es sich auf ColdFusion bezieht). Ich habe versucht, die -Konfiguration auf context.xml wie in diesem anderen Beitrag vorgeschlagen. Ich habe auf Adobe bug base geschrieben und erhielt keine Antwort.

Alle Ideen sind willkommen. Leider haben wir viele Benutzer mit "Español" in einem Cookie, und wir können keinen ColdFusion-Code ausführen, um dies zu löschen oder zu ändern. Wir haben nicht dieses Problem in Coldfusion 9 und verpassten dies in einem QS-Kontrolle nach Coldfusion Upgrade 11.

Voll Ausnahme von Coldfusion-error.log:

Sep 03, 2015 11:43:58 PM org.apache.coyote.ajp.AjpProcessor process 
SEVERE: Error processing request 
java.lang.IllegalArgumentException: Control character in cookie value or attribute. 
    at org.apache.tomcat.util.http.CookieSupport.isHttpSeparator(CookieSupport.java:193) 
    at org.apache.tomcat.util.http.Cookies.getTokenEndPosition(Cookies.java:502) 
    at org.apache.tomcat.util.http.Cookies.processCookieHeader(Cookies.java:349) 
    at org.apache.tomcat.util.http.Cookies.processCookies(Cookies.java:168) 
    at org.apache.tomcat.util.http.Cookies.getCookieCount(Cookies.java:106) 
    at org.apache.catalina.connector.CoyoteAdapter.parseSessionCookiesId(CoyoteAdapter.java:986) 
    at org.apache.catalina.connector.CoyoteAdapter.postParseRequest(CoyoteAdapter.java:743) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:417) 
    at org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:199) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:314) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
+2

pls Bericht zu https: //bugbase.adobe .com/ – Henry

+0

Sind Nicht-ASCII-Cookies gültig? Ich dachte, nur US-ASCII-Zeichen, die CTLs, Leerzeichen, DQUOTE, Komma, Semikolon und Backslash-Zeichen ausließen, waren gültig. http://StackOverflow.com/a/1969339/693068 Können Sie eine IIS-Regel schreiben, um sie zu identifizieren und zu bereinigen? Können die OWASP-Funktionen von CF es erfassen? –

+0

Ich habe TryCF.com für mich selbst gebrochen und versucht, dies zu testen. Nach dem Ausführen von document.cookie = "a = ñ"; Es würden keine Codebeispiele ausgeführt. Wenn Sie stattdessen CFCookie verwenden, wird der Cookie-Wert sicher als "% C3% B1" codiert. –

Antwort

3

Sie könnten Nicht-ASCII-Cookies identifizieren mit Eine IIS Rewrite-Regel, die den Benutzer auf eine statische HTML-Seite umleitet und den Cookie löscht oder neu schreibt. (Ich testete dies mit CF10 und es funktioniert.)

Dieser Nicht-ASCII-Cookie tötet ColdFusion10/11. (Hinweis: Coldfusion kann nur in Großbuchstaben Zugriff auf Cookie-Namen.)

document.cookie="a=ñ"; 

Fügen Sie diese auf Ihre IIS web.config-Datei.

<rule name="Route Bad Cookie" enabled="true" stopProcessing="true"> 
    <match url="^(.*)" /> 
    <conditions logicalGrouping="MatchAll"> 
     <add input="{PATH_INFO}" pattern=".*htm$" negate="true" />   
     <add input="{HTTP_COOKIE}" pattern="([^\x00-\x7F]+)" /> 
    </conditions> 
    <action type="Redirect" url="/clearCookie.htm" redirectType="Temporary"/> 
</rule> 

HINWEIS: Die obige Regel paßt auf jedes Skript mit Ausnahme von „HTM“ Dateien (falls Sie bereits mit dem IIS-Rewrite zu verstecken.CFM in Ihren URLs.)

<match url="*.cfm*" /> 

Wenn Sie die Sicherheit bewusst sind, können Sie die rewrite Aktion mit einer abort ersetzen könnte.

<action type="AbortRequest" /> 

oder eine benutzerdefinierte Antwort:

<action type="CustomResponse" statusCode="403" 
    statusReason="Forbidden: Invalid non-ASCII cookie" 
    statusDescription="Only US-ASCII characters excluding CTLs, whitespace, 
    DQUOTE, comma, semicolon, and backslash are allowed in a cookie." /> 

Hier ist ein Beispielcode das Cookie (/clearCookie.htm) zu löschen:

<script> 
var mydate = new Date(); 
mydate.setTime(mydate.getTime() - 1); 
document.cookie = "a=; expires=" + mydate.toGMTString(); 
</script> 
Verwandte Themen