为什么IIS拒绝编码字符

时间:2017-01-23 20:18:30

标签: iis

  1. 在IIS上设置请求筛选以过滤查询字符串以拒绝特殊字符,例如“>”。

  2. 甚至在链接中想到特殊字符“>”被编码为“%3c”,为什么IIS仍然拒绝该链接并生成404.18.0.0错误?

  3. 似乎IIS提前解码了网址,是否有办法阻止它这样做?

1 个答案:

答案 0 :(得分:0)

URI中的>始终编码为%3c。如果你在URI中直接有一个>它不是一个URI,它就是随机垃圾。要求>被禁止以及%3c被禁止是要求同样的事情。

相反,如果你在URI中有%41,那么它有一个逃避方法的一部分,它应该被视为与你在那里A完全相同。同样,如果你禁止A,那么你也想禁止%41因为它们是同一件事。 (例外情况是,在转义时,不应将URI中的/这样的字符本身视为重要字符。

由于禁止>是为了避免XSS和其他安全漏洞,如果>在URI中未转义有效,您仍然希望禁止%3c确保> 1}}没有潜入无法处理它的任何东西。

相比之下,大约2000个IIS,其中一些设置曾经(错误地)将%c0%af视为/(错误的是UTF-8过长)但阻止/../阻止阅读的代码webroot之外的文件没有将其视为/,因此块没有阻塞,并且确实可以从与webroot相同的驱动器上的任何位置读取文件。您在询问是否有一种方法可以使您的系统同样容易受到使用%3c的攻击,而不会受到使用>攻击的攻击。即使这对URI有任何意义,也很难理解为什么这样做是可取的。