【问题标题】:AJAX value %27 results in 403 forbiddenAJAX 值 %27 导致 403 被禁止
【发布时间】:2021-06-17 07:10:45
【问题描述】:

Stack Overflow 上有很多关于表单字段中撇号的问题;主要是关于未编码的值。 This 是一篇非常有见地的文章,介绍了为什么 encodeURIComponent(str) 不适用于撇号以及如何创建自己的自定义

    function rfc3986EncodeURIComponent (str) {...

我遇到的问题是,即使我将撇号 (%27) 编码为来自 JavaScript 的 AJAX 调用中的值,我也会收到 403 Forbidden 错误。 Tomcat (8.5) 立即返回。 Tomcat 服务器上似乎没有应用程序处理(应用程序日志和 catalina.out 均未显示任何活动)。

./application/processSomeAction.action?encodedValue=abc%27 导致 403 错误。

./application/processSomeAction.action?encodedValue=abc%2a 处理正常。

./application/processSomeAction.action?encodedValue=abcd 处理正常。

AJAX 调用是纯 JavaScript,没有 JQuery。

在 AJAX 调用中根本不允许使用 RFC 3986 子分隔符吗?

【问题讨论】:

  • 不可能“全部发生在 Chrome 浏览器中”,因为 Chrome 不构成请求代码(尽管它可能会返回 cached 响应)。网络选项卡显示什么?打开网络选项卡将显示实际的请求+响应,并且可以禁用缓存(无论如何都有一个选项)。
  • 感谢 user2864740。编辑问题以声明“Tomcat 上没有应用程序处理”。
  • 为什么不简单地发送一个' 字符? Tomcat前面有web服务器吗?还是WAF等?除了访问日志之外,您的 Tomcat 日志other 中是否还有其他内容?意思是……你能证明Tomcat看到了请求吗?当添加一个在值中包含“%27”的请求参数时(来自例如wget),我无法让我的 Tomcat 实例返回 403。
  • 谢谢Chtistopher。该问题最初是由未编码的撇号引起的。然后我们尝试对撇号进行编码,同样的问题仍然存在。请注意,此问题发生在 AJAX 调用的上下文中。上面的代码遵循 "xmlhttp.open("POST", "..." 你是对的。我不确定 Tomcat 服务器是否看到了请求。我只知道 Chrome DEV 工具中的网络选项卡在我的 JavaScript 中调用“xmlhttp.send(null);”的行显示 403 状态。
  • 我最初的怀疑是 Chrome 浏览器中的某些东西正在生成 403 状态,因为根据 RFC 3986,撇号是“子分隔符”,并且 Chrome 禁止我的请求,因为我没有有一对这样的分隔符。

标签: javascript ajax google-chrome tomcat tomcat8


【解决方案1】:

这原来是代理服务器限制;与 Chrome、Tomcat 或 JavaScript 无关。很抱歉没有尽快找到答案。

Siteminder 代理默认(内置)检查 3 个最易受攻击的跨站点脚本字符: 小于号、大于号和单引号(撇号) ‘

【讨论】:

    猜你喜欢
    • 2012-12-24
    • 2012-10-13
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多