【发布时间】:2015-10-22 19:24:36
【问题描述】:
在响应任何使用包含非 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
- Cold Fusion 11(标准)
- 所有操作系统和软件都运行最新的补丁版本。
我已尝试将 -Dfile.encoding=UTF-8 添加到 Java 参数中。
我没有发现其他人在 ColdFusion 上遇到过这个问题。有similar issues 在Tomcat 上运行Java 代码。然而,由于 ColdFusion 11 与 Tomcat 捆绑在一起,我什至不知道运行的是什么版本的 Tomcat,也不知道如何升级它。 (看起来 ColdFusion 10 运行 Tomcat 7) Adobe 似乎没有关于 ColdFusion 11 的 Tomcat 层的文档(特别是它与 ColdFusion 的关系)。我已经尝试将<CookieProcessor /> 配置应用于context.xml,正如其他帖子中所建议的那样。我已发帖到Adobe bug base 并没有收到任何回复。
欢迎任何想法。不幸的是,我们有很多用户在 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)
【问题讨论】:
-
非 ASCII cookie 是否有效?我认为只有不包括 CTL、空格、DQUOTE、逗号、分号和反斜杠字符的 US-ASCII 字符是有效的。 stackoverflow.com/a/1969339/693068 你能写一个 IIS 规则来识别它并清理它吗? CF 的 OWASP 功能能赶上吗?
-
我为自己尝试测试这个而破坏了 TryCF.com。运行后 document.cookie="a=ñ";没有代码示例会运行。如果您改用 CFCookie,则 cookie 值被安全地编码为“%C3%B1”。
-
使用 ColdFusion 9 时不存在此错误,但在 CF10 和 11 上已确认。
-
Henry:如原帖所述,它已发布到 Adobe 错误库(此后 8 天内没有活动)。
标签: tomcat cookies coldfusion jwplayer coldfusion-11