T S*_*ift 9 cookies coldfusion tomcat jwplayer coldfusion-11
为了响应任何包含非ASCII字符的cookie的请求,ColdFusion 11似乎崩溃了.IIS 8.5返回HTTP 500内部服务器错误(空白页).
重现步骤:
在Javascript控制台中运行以下命令并尝试加载任何CFML页面:
document.cookie="a=ñ";
(可选)请求任何.html或.txt文件并接收正常响应.
请求任何ColdFusion页面并收到空白页,HTTP 500内部服务器错误.
唯一的解决方法是清除浏览器cookie.
环境:
我已经尝试添加-Dfile.encoding=UTF-8Java参数.
我没有在ColdFusion上找到其他人遇到这个问题.在Tomcat上运行Java代码存在类似的问题.但是,由于ColdFusion 11与Tomcat捆绑在一起,我甚至不知道Tomcat的运行版本以及如何升级它.(看起来ColdFusion 10运行Tomcat 7)Adobe似乎没有关于ColdFusion 11的Tomcat层的文档(特别是它与ColdFusion的关系).我已尝试将<CookieProcessor />配置应用于context.xml,如其他帖子所示.我已发布到Adobe bug基础并且未收到任何响应.
欢迎任何想法.不幸的是,我们在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)
Run Code Online (Sandbox Code Playgroud)
您可以使用 IIS 重写规则识别非 ASCII cookie,然后将用户重定向到静态 HTML 页面并删除或重写 cookie。(我使用 CF10 对此进行了测试,它有效。)
\n\n此非 ASCII cookie 会杀死 ColdFusion10/11。(注意:ColdFusion 只能访问大写的 cookie 名称。)
\n\ndocument.cookie="a=\xc3\xb1";\nRun Code Online (Sandbox Code Playgroud)\n\n将此添加到您的 IIS web.config 文件中。
\n\n<rule name="Route Bad Cookie" enabled="true" stopProcessing="true">\n <match url="^(.*)" />\n <conditions logicalGrouping="MatchAll">\n <add input="{PATH_INFO}" pattern=".*htm$" negate="true" /> \n <add input="{HTTP_COOKIE}" pattern="([^\\x00-\\x7F]+)" />\n </conditions>\n <action type="Redirect" url="/clearCookie.htm" redirectType="Temporary"/>\n</rule>\nRun Code Online (Sandbox Code Playgroud)\n\n注意:上述规则匹配除“.htm”文件之外的任何脚本(如果您已使用 IIS 重写来隐藏 URL 中的 .CFM)。
\n\n <match url="*.cfm*" />\nRun Code Online (Sandbox Code Playgroud)\n\n如果您有安全意识,您可以将该rewrite操作替换为abort.
<action type="AbortRequest" />\nRun Code Online (Sandbox Code Playgroud)\n\n或自定义响应:
\n\n<action type="CustomResponse" statusCode="403"\n statusReason="Forbidden: Invalid non-ASCII cookie"\n statusDescription="Only US-ASCII characters excluding CTLs, whitespace,\n DQUOTE, comma, semicolon, and backslash are allowed in a cookie." />\nRun Code Online (Sandbox Code Playgroud)\n\n以下是删除 cookie 的一些示例代码 (/clearCookie.htm):
\n\n<script>\nvar mydate = new Date();\nmydate.setTime(mydate.getTime() - 1);\ndocument.cookie = "a=; expires=" + mydate.toGMTString();\n</script>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
799 次 |
| 最近记录: |