2015-10-22 17 views
8

Để đáp ứng mọi yêu cầu với cookie chứa ký tự không phải ASCII, ColdFusion 11 có vẻ như bị lỗi. IIS 8.5 trả về lỗi máy chủ nội bộ HTTP 500 (trang trắng trống).ColdFusion 11 - 500 Lỗi Máy chủ Nội bộ từ Ký tự Cookie Không phải ASCII

bước để tái sản xuất:

  1. Run sau trong bảng điều khiển Javascript và cố gắng để tải bất kỳ trang CFML: document.cookie="a=ñ";

  2. (Tùy chọn) Yêu cầu bất kỳ .html hoặc file .txt và nhận bình thường phản ứng.

  3. Yêu cầu bất kỳ ColdFusion trang nào và nhận được trang trắng trống, Lỗi máy chủ nội bộ HTTP 500.

  4. Cách giải quyết duy nhất là xóa cookie của trình duyệt.

Môi trường:

  • Windows Server 2012 R2 Standard
  • IIS 8,5
  • Cold Fusion 11 (Tiêu chuẩn)
  • Tất cả các hệ điều hành và phần mềm đang chạy phiên bản vá mới nhất.

Tôi đã thử thêm -Dfile.encoding=UTF-8 vào đối số Java.

Tôi chưa tìm thấy ai khác đang gặp sự cố này trên ColdFusion. Có similar issues chạy mã Java trên Tomcat. Tuy nhiên kể từ khi Coldfusion 11 được đóng gói với Tomcat, tôi thậm chí không biết phiên bản Tomcat đang chạy là gì và cách nâng cấp nó. (Có vẻ như ColdFusion 10 chạy Tomcat 7) Adobe dường như không có tài liệu về lớp Tomcat của ColdFusion 11 (cụ thể cách nó liên quan đến ColdFusion). Tôi đã thử áp dụng cấu hình <CookieProcessor /> cho context.xml như được đề xuất trên bài đăng khác đó. Tôi đã đăng lên số Adobe bug base và không nhận được phản hồi.

Mọi ý tưởng đều được chào đón. Rất tiếc, chúng tôi có rất nhiều người dùng có "Español" trong cookie và chúng tôi không thể thực thi bất kỳ mã ColdFusion nào để xóa hoặc thay đổi điều này. Chúng tôi không có vấn đề này trong ColdFusion 9 và bỏ lỡ này trong một tấm séc bảo đảm chất lượng sau khi nâng cấp lên ColdFusion 11.

Full ngoại lệ từ 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

xin báo cáo đến https: //bugbase.adobe .com/ – Henry

+0

Cookie không phải ASCII có hợp lệ không? Tôi chỉ nghĩ rằng các ký tự US-ASCII không bao gồm các ký tự CTL, khoảng trắng, DQUOTE, dấu phẩy, dấu chấm phẩy và dấu gạch chéo ngược là hợp lệ. http://stackoverflow.com/a/1969339/693068 Bạn có thể viết một quy tắc IIS để xác định nó và khử trùng không? Các tính năng OWASP của CF có thể bắt được nó không? –

+0

Tôi đã phá vỡ TryCF.com cho bản thân mình cố gắng để kiểm tra này. Sau khi chạy document.cookie = "a = ñ"; không có mẫu mã nào sẽ chạy. Nếu bạn sử dụng CFCookie thay vào đó, giá trị cookie được mã hóa một cách an toàn dưới dạng "% C3% B1". –

Trả lời

3

Bạn có thể xác định các tập tin cookie không ASCII sử dụng một quy tắc viết lại IIS và sau đó chuyển hướng người dùng đến một trang HTML tĩnh và xóa hoặc viết lại cookie. (Tôi đã thử nghiệm điều này bằng cách sử dụng CF10 và nó hoạt động.)

Cookie không phải ASCII này giết chết ColdFusion10/11. (LƯU Ý: ColdFusion chỉ có thể truy cập các tên cookie được đặt ở trên.)

document.cookie="a=ñ"; 

Thêm tệp này vào tệp IIS web.config của bạn.

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

LƯU Ý: Quy tắc trên khớp với bất kỳ tập lệnh nào ngoại trừ tệp ".htm" (trong trường hợp bạn đang sử dụng ghi đè IIS để ẩn.CFM trong URL của bạn.)

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

Nếu bạn là an ninh có ý thức, bạn có thể thay thế các hành động rewrite với một abort.

<action type="AbortRequest" /> 

hoặc một phản ứng tùy chỉnh:

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

Dưới đây là một số mẫu mã để xóa các cookie (/clearCookie.htm):

<script> 
var mydate = new Date(); 
mydate.setTime(mydate.getTime() - 1); 
document.cookie = "a=; expires=" + mydate.toGMTString(); 
</script> 
Các vấn đề liên quan