【问题标题】:Coding forward and backward slashes in tomcat 7?在tomcat 7中编码正斜杠和反斜杠?
【发布时间】:2012-03-15 11:59:28
【问题描述】:

我尝试发送http://site.com/abc%2Fabc 之类的请求,但它不起作用(发送状态 400)。出于安全原因,我如何理解 tomcat 不接受编码的路径分隔符,但我不知道如何启用此编码。 (我只找到了用于 apache http 服务器的 AllowEncodedSlashes 选项)。你能帮帮我吗?

更新

我使用小技巧解决了这个问题 - 在渲染之前替换“|”上的所有“/”字符并在 '/' 上反转此字符后

【问题讨论】:

  • 我遇到了同样的问题,但我在 SO 上找不到这个问题,因为我没有意识到问题与编码斜线有关。我看到 Tomcat 7 出现 400 状态错误,响应为空/无响应,所以这就是我在 google 中寻找的内容。我希望用关键字添加这个评论可以帮助有同样问题的人找到这个问题:)

标签: tomcat tomcat7


【解决方案1】:

有一个允许编码路径分隔符的 Tomcat 选项。

将 CATALINA_OPTS 环境变量设置为

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

这将允许编码斜线。

【讨论】:

  • 请注意,此功能默认禁用,因为它存在安全风险:请参阅tomcatexpert.com/blog/2011/11/02/…en.wikipedia.org/wiki/Directory_traversal_attack
  • 请注意,要修复正斜杠,您需要 org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH。如此可耻的 tomcat 决定破坏 HTTP,而不是修复底层安全问题(%2F 和 %5C 在 URL 中完全有效)
  • 另请注意,Tomcat 会将路径中的编码反斜杠转换为正斜杠
  • 您好,请问在哪里可以修改这些参数?谢谢
  • @JohnnySparow 通常设置环境变量的方法取决于您的平台,但在这种特定情况下,answer by user2335780 应该跨平台工作。
【解决方案2】:

我们也可以添加这个条目 catalina.properties 中的“org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true” 允许在 url 中编码斜线。


并且要允许反斜杠,您必须设置不同的属性。 Refer this url 用于不同的配置。

【讨论】:

    【解决方案3】:

    通过编辑 $CATALINA_HOME\conf\server.xml 使这对我可行

    旧值:<Connector ... protocol="HTTP/1.1"... />

    新值:<Connector ... protocol="HTTP/1.1"... relaxedQueryChars='\ { } |' />

    我使用的是 Tomcat 7.0.88

    【讨论】:

    • 您先生应该得到更多的支持。这是唯一对我有用的东西。非常感谢。
    【解决方案4】:

    您是否尝试过将URIEncoding="UTF-8" 放入您的<Connector 中的server.xml

    【讨论】:

    • 是的。我将 URIEncoding="UTF-8" 放在 server.xml 中。它不仅适用于 %2F.. 例如 %3A - ":" 工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-29
    • 2013-11-14
    • 1970-01-01
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多