2015-10-22 23 views
8

ASCII olmayan bir karakter içeren bir tanımlama bilgisine yanıt olarak ColdFusion 11 çöküyor. IIS 8.5 bir HTTP 500 İç Sunucu Hatası (boş beyaz sayfa) döndürür. JavaScript konsolunda aşağıdakiColdFusion 11 - 500 ASCII Olmayan Çerez Karakterinden Dahili Sunucu Hatası

  1. Çalıştır ve herhangi CFML sayfasını yüklemek girişimi:

    Yeniden oluşturma adımları document.cookie="a=ñ";

  2. (İsteğe bağlı) İsteği herhangi .html veya .txt dosya ve normal almak tepki.

  3. Herhangi bir ColdFusion için bir sayfa isteyin ve boş bir beyaz sayfa, HTTP 500 İç Sunucu Hatası.

  4. Tek çözüm, tarayıcı çerezlerini temizlemektir.

Çevre:

  • Windows Server 2012 R2 Standard
  • IIS 8.5
  • Cold Fusion 11 (Standart)
  • tüm işletim sistemi ve yazılım son yamalı sürümleri çalıştırıyor.

Java argümanlarına -Dfile.encoding=UTF-8 eklemeyi denedim.

ColdFusion'da bu konuyla ilgili başka bir çalışan bulamadım. Tomcat üzerinde similar issues çalışan Java kodu vardır. Ancak ColdFusion 11, Tomcat ile birlikte sunulduğundan, Tomcat'in hangi sürümünün çalıştığını ve nasıl yükseltileceğini bile bilmiyorum. (ColdFusion 10, Tomcat 7'yi çalıştırır.) Adobe, ColdFusion 11'in Tomcat katmanıyla (özellikle de ColdFusion ile nasıl ilişkili olduğu) ilgili belgelere sahip değildir. <CookieProcessor /> yapılandırmasını context.xml'ye diğer gönderide önerildiği gibi uygulamayı denedim. Adobe bug base'a gönderdim ve yanıt almadım.

Herhangi bir fikir kabul edilir. Maalesef bir çerezde "Español" ile çok sayıda kullanıcımız var ve bunu temizlemek veya değiştirmek için ColdFusion kodunu çalıştıramıyoruz. Biz ColdFusion 9'da bu sorun var ve ColdFusion yükselttikten sonra bir KG kontrol altında bu cevapsız vermedi 11.

coldfusion-error.log gelen

Tam istisna:

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

lütfen raporunu: Burada

<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." /> 

çerez (/clearCookie.htm) silmek için bazı örnek kod //bugbase.adobe .com/ – Henry

+0

ASCII olmayan çerezler geçerli mi? CTL, boşluk, DQUOTE, virgül, noktalı virgül ve ters eğik çizgi karakterleri hariç sadece US-ASCII karakterlerinin geçerli olduğunu düşündüm. http://stackoverflow.com/a/1969339/693068 Tanımlamak ve sterilize etmek için bir IIS kuralı yazabiliyor musunuz? CF'nin OWASP özellikleri onu yakalayabilir mi? –

+0

Bunu denemek için TryCF.com'u kendim kırdım. Document.cookie = "a = ñ" çalıştırdıktan sonra; Hiçbir kod örneği çalıştırılamaz. Bunun yerine CFCookie kullanırsanız, çerez değeri güvenli bir şekilde "% C3% B1" şeklinde kodlanır. –

cevap

3

kullanarak ASCII olmayan çerezleri teşhis edebilir Bir IIS Yeniden Yazım kuralı ve daha sonra kullanıcıyı statik bir HTML sayfasına yönlendirin ve çerezi silin veya yeniden yazın. (Ben bu kullanarak CF10 test edilmiş ve işe yarıyor.)

Bu ASCII olmayan çerez ColdFusion10/11 öldürür. (NOT: ColdFusion yalnızca üst kasalı çerez adlarını erişebilirsiniz.)

document.cookie="a=ñ"; 

IIS web.config dosyasında bu ekleyin.

<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> 

NOT: Yukarıdaki kural (".htm" dosyaları hariç senaryoyu eşleşir durumda zaten gizlemek için IIS Rewrite kullanıyor.URL'lerinizdeki CFM.)

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

güvenlik bilinçli iseniz, bir abort ile rewrite eylemi yerini alabilir.

<action type="AbortRequest" /> 

veya özel yanıtı: https

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