Tomcat 非ASCII Cookie字符导致ColdFusion 11-500内部服务器错误

Tomcat 非ASCII Cookie字符导致ColdFusion 11-500内部服务器错误,tomcat,cookies,coldfusion,jwplayer,coldfusion-11,Tomcat,Cookies,Coldfusion,Jwplayer,Coldfusion 11,在使用包含非ASCII字符的cookie响应任何请求时,ColdFusion 11似乎会崩溃。IIS 8.5返回HTTP 500内部服务器错误(空白白页) 复制步骤: 在Javascript控制台中运行以下命令并尝试加载任何CFML页面: document.cookie=“a=ñ” (可选)请求任何.html或.txt文件并接收正常响应 请求任何ColdFusion一个页面并接收一个空白的白色页面,HTTP 500内部服务器错误 唯一的解决方法是清除浏览器cookie 环境: Windows

在使用包含非ASCII字符的cookie响应任何请求时,ColdFusion 11似乎会崩溃。IIS 8.5返回HTTP 500内部服务器错误(空白白页)

复制步骤:

  • 在Javascript控制台中运行以下命令并尝试加载任何CFML页面:
    document.cookie=“a=ñ”

  • (可选)请求任何.html或.txt文件并接收正常响应

  • 请求任何ColdFusion一个页面并接收一个空白的白色页面,HTTP 500内部服务器错误

  • 唯一的解决方法是清除浏览器cookie

  • 环境:

    • Windows Server 2012 R2标准
    • IIS 8.5
    • 冷聚变11(标准)
    • 所有操作系统和软件都运行最新的补丁版本
    我已经尝试将
    -Dfile.encoding=UTF-8
    添加到Java参数中

    我还没有发现其他人在ColdFusion上遇到这个问题。Tomcat上正在运行Java代码。然而,由于ColdFusion 11与Tomcat捆绑在一起,我甚至不知道Tomcat运行的是什么版本,也不知道如何升级它。(ColdFusion 10似乎运行Tomcat 7)Adobe似乎没有关于ColdFusion 11的Tomcat层的文档(特别是它与ColdFusion的关系)。我已经尝试过将
    配置应用到context.xml,正如在另一篇文章中建议的那样。我已发布到,但未收到任何回复

    欢迎提出任何意见。不幸的是,我们有很多用户在cookie中使用“Español”,我们无法执行任何ColdFusion代码来清除或更改这一点。我们在ColdFusion 9中没有这个问题,在升级到ColdFusion 11后的QA检查中遗漏了这个问题

    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)
    

    您可以使用IIS重写规则识别非ASCII cookie,然后将用户重定向到静态HTML页面并删除或重写cookie。(我使用CF10对此进行了测试,结果证明它是有效的。)

    这种非ASCII cookie会杀死ColdFusion10/11。(注意:ColdFusion只能访问大小写的cookie名称。)

    将其添加到IIS web.config文件中

    <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>
    
    或自定义响应:

    <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." />
    
    
    
    下面是一些删除cookie的示例代码(/clearCookie.htm):

    
    var mydate=新日期();
    mydate.setTime(mydate.getTime()-1);
    document.cookie=“a=;expires=“+mydate.togmString();
    
    请向报告非ASCII cookie是否有效?我认为只有US-ASCII字符有效,不包括CTL、空格、DQUOTE、逗号、分号和反斜杠字符。您是否能够编写IIS规则来识别和清理它?CF的OWASP功能能抓住它吗?我为了测试这个,破坏了TryCF.com。运行document.cookie=“a=ñ”之后;不会运行任何代码示例。如果改用CFCookie,cookie值将安全地编码为“%C3%B1”。使用ColdFusion 9时不存在此错误,但在CF10和CF11上得到确认。Henry:正如原始帖子中所述,它已发布到Adobe bug base(此后8天内没有任何活动)。
      <match url="*.cfm*" />
    
    <action type="AbortRequest" />
    
    <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." />
    
    <script>
    var mydate = new Date();
    mydate.setTime(mydate.getTime() - 1);
    document.cookie = "a=; expires=" + mydate.toGMTString();
    </script>