当前位置: 首页 > 知识库问答 >
问题:

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

方琦
2023-03-14

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

复制的步骤:

>

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

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

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

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

    环境:

    • Windows Server 2012 R2标准版

    我已尝试添加-Dfile。encoding=UTF-8到Java参数。

    我还没有在ColdFusion上发现其他人遇到这个问题。在Tomcat上运行Java代码也存在类似的问题。然而,由于ColdFusion 11与Tomcat捆绑在一起,我甚至不知道Tomcat正在运行哪个版本,也不知道如何升级它。(ColdFusion 10似乎运行Tomcat 7)Adobe似乎没有关于ColdFusion 11的Tomcat层的文档(特别是它与ColdFusion的关系)。我试过应用

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

    coldfusion错误的完全异常。日志

    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)
    

  • 共有1个答案

    梁季
    2023-03-14
    匿名用户

    您可以使用IIS重写规则识别非ASCII cookie,然后将用户重定向到静态超文本标记语言页面,并删除或重写cookie。(我用CF10测试了这个,它是有效的。)

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

    document.cookie="a=ñ";
    

    将其添加到您的IIS网站。配置文件。

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

    注意:上述规则匹配除“.htm”文件之外的任何脚本(如果您已经在使用IIS重写在URL中隐藏.CFM)

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

    如果您有安全意识,可以将重写操作替换为abort

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

    下面是一些删除cookie的示例代码(/clearCookie.htm):

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

     类似资料:
    • 问题内容: 我正在尝试执行此AJAX帖子,但是由于某些原因,我遇到了服务器500错误。我可以看到它在控制器中达到了断点。因此问题似乎出在回调上。任何人? 这是应该返回的字符串: 问题答案: 我怀疑服务器方法在通过断点后会引发异常。使用Firefox / Firebug或IE8开发人员工具查看您从服务器获得的实际响应。如果有异常,您将获得YSOD html,这应有助于您确定要查找的位置。 还有一件事

    • 我在尝试进行返回JSON的ajax POST调用时出现内部错误。ajax调用来自JS页面: 这是我的Spring MVC调用方法: 问题是,我在这个类中只设置了几个字段(30个字段中有17个)。这是一个具有简单setter-getter的bean类。如果我设置了所有30个字段,效果很好。你能建议如何设置JSON响应,以便我可以纠正这个问题吗。

    • 问题内容: 我正在尝试为这个工作中的项目学习AJAX。我有一个网站加载病人正在服用的药物。 我递归调用此AJAX函数,以便它将附加一个包含单种药物和7天历史记录的新表。我在使代码在FF和IE中执行时遇到问题。在chrome中效果很好。我有显示xmlhttp.status的警报,这是我得到的: xmlhttp.status == 500(内部服务器错误)。 我注释掉了所有递归,因此将其范围缩小到了这

    • 我收到以下错误 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,webmaster@strivemedicare.in并告知他们错误发生的时间,以及可能导致错误的任何行为。 有关此错误的详细信息,请参阅服务器错误日志。 此外,尝试使用错误文档处理请求时遇到 500 内部服务器错误错误。

    • 我试图实现PhpPression转换一些文件,所以我有以下代码: 由于某种原因,这段代码正是导致500个内部服务器错误的原因。我已将错误报告设置为“全部”,但未显示任何错误。路径是正确的,我的根目录中有PhpOffice文件夹(public_html)和相应的子文件夹。 自动加载程序代码是这样加载的:

    • 我一直试图在nginx上安装CakePHP,但我遇到了一个死胡同。尝试访问web根目录时,我收到一个500内部服务器错误。我在我的错误中得到了这个错误。日志: PHP消息:PHP致命错误:require():无法打开required'/var/www/html/test/vendor/autoload。php'(include_path='。:/usr/share/php:/usr/share/p