Java 禁止使用IIS 403,URL中有%2F

Java 禁止使用IIS 403,URL中有%2F,java,iis,coldfusion,url-rewriting,http-status-code-403,Java,Iis,Coldfusion,Url Rewriting,Http Status Code 403,我让IIS(Microsoft IIS/7.5)返回一个403禁止,我不知道为什么。我已经把它缩小到%2F,但只有在前面有一个字母的时候。你知道这是什么原因吗 这些工作 但是,如果您在%2F前面放置任何一个字母,它将以403失败 这些失败了 谢谢 更新:我排除了ColdFusion,因为它给出了相同的403: 更新: Top Level IIs: Checked: Allow unlisted file name extensions Allow unli

我让IIS(Microsoft IIS/7.5)返回一个403禁止,我不知道为什么。我已经把它缩小到
%2F
,但只有在前面有一个字母的时候。你知道这是什么原因吗

这些工作

但是,如果您在
%2F
前面放置任何一个字母,它将以403失败

这些失败了

谢谢

更新:我排除了ColdFusion,因为它给出了相同的403:

更新:

Top Level IIs:
Checked:  
  Allow unlisted file name extensions
  Allow unlisted verbs
  Allow high-bit characters
Unchecked:
  Allow double escaping

Request Limits:
Maximum allowed content length (Bytes):  30000000 Maximum URL length (Bytes):
4096 Maximum query string (Bytes):  2048

Sites
mySite123:
  Checked:  
    Allow unlisted verbs
    Allow high-bit characters
  Unchecked:
    Allow unlisted file name extensions
    Allow double escaping

  Request Limits:
    Maximum allowed content length (Bytes):  2147483647
    Maximum URL length (Bytes):  4096
    Maximum query string (Bytes):  2048

  Deny URL
    /CFIDE/Administrator
    /CFIDE/adminapi
更新:如果我更改正在访问的目录,我可以将403更改为404。例如:

这将按预期返回404:

这将返回403:


那么,假设403问题与“mySite123”虚拟目录设置有关是否安全呢?

我敢肯定,您将得到403禁止响应作为IIS的一项安全功能。这是已知的攻击向量。字符序列
%2F
只是
/
(正斜杠)字符的URL编码表示。显然,这对浏览器和互联网有着特殊的意义。它用于目录遍历。在URL中编码特殊字符是一种绕过一些基本安全措施的黑客伎俩。请参阅OWASP。从(大约在该页的一半以下)开始:

第10章攻击后端组件575

劈开台阶

  • 始终使用前斜杠和后斜杠尝试路径遍历序列 砍。许多输入过滤器只检查其中一个,而文件系统可能同时支持这两个过滤器

  • 使用 以下编码。请确保对其中的每个斜线和点进行编码 你的意见:

    点-%2e
    正斜杠-%2f
    反斜杠-%5c

  • 尝试使用1 6位Unicode编码:

    点-%u002e
    正斜杠-%u22l5
    反斜杠-%u22l6

  • 尝试双URL编码:

    网点-%252e
    正斜杠-%252f
    反斜杠-%255c

  • 尝试过长的UTF-8 Unicode编码:

    网点-%c0%2e、%e0%40%ae、%c0ae等
    正斜杠-%cO%af、%e0%80%af、%c0%2f等
    反斜杠-%c0%5c、%c0%80%5c等

  • (粗体是我的重点)

    你可能会想出一个方法来允许这一点,但为什么会呢?我不推荐。您想让您的服务器受到潜在的攻击吗?我认为最好避免这种URL序列。URL查询字符串中真的需要正斜杠字符吗?您可以使用另一种不太危险且不公开服务器的方法,而不是在查询字符串中使用此字符。对于那个特定的URL变量,您可以查找这个不同的字符,并用服务器端所需的字符替换它。比如:

    而不是

    http://example.com/index.cfm?x=a%2Fblah
    
    使用

    然后在服务器上,您知道在
    x
    变量中需要
    -
    (破折号)字符,因此在服务器上用
    /
    (正斜杠)字符替换它。或者需要什么样的性格

    冷若冰霜

    <cfset x = Replace(URL.x,"-","/","ALL") />
    
    
    
    请确保使用该字符串中不存在的唯一字符始终记得清理服务器上所有用户提供的输入。

    以下是我发现的一些关于
    %2f
    字符序列在URL中易受攻击的参考:

    请注意,上面的一些引用与IIS以外的web服务器相关,但它们表明存在该漏洞


    您可以尝试的其他方法是双重转义序列。因此,您使用的不是
    %2f
    ,而是
    %252F
    %25
    是百分号)。但您也需要在IIS中进行更改以支持此功能。参考-。但我认为这是最后的选择

    与我一起工作的服务器管理员表示:

    “在对JAVA进行更新后,问题停止了

    我安装了Java1.7的最新安全更新(更新25- (64位)星期六

    重新启动web服务器后,问题现在消失。”

    更新:我几天前接受了这个答案,但现在这个问题似乎又回来了


    更新(2015年8月31日):已解决。这与其他答案提到的无关。数据中心防火墙人员有一些无效的设置/规则。我不能再详细说明了。调整防火墙规则是解决办法。

    为了给这个线程添加一些细节,
    %2f
    (正如前面所说,它只是
    /
    的一个编码版本)让Microsoft有一段时间受到目录遍历漏洞的困扰,允许黑客访问web目录以外的文件。流行的入侵防御系统(如)有规则阻止这种行为。以及攻击字符串和安全警告的历史示例。
    %2f
    编码多年来给web服务器管理员、安全管理员带来了巨大的痛苦(直到今天,仍然可以看到各种攻击被积极利用)。

    总之,我正在绞尽脑汁解决SharePoint上的TermStoreManager故障,并且 在查看 使用Get-SPTaxonomySession获取TaxonomySession内容

    但是,由于某些原因,“术语库管理器”页面未显示任何术语集

    问题恰好是termsto的javascript的URL
    <cfset x = Replace(URL.x,"-","/","ALL") />