我有一个 URL 重写规则,用于阻止从除已定义列表之外的任何 URL 访问网站。400 Bad Request
如果 URL 不在列表中,则该规则返回。
<rule name="No unknown hosts" stopProcessing="true">
<match url=".*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" negate="true" />
<add input="{HTTP_HOST}" pattern="^admin\.example\.com$" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="400" />
</rule>
我尝试阻止的 URL 示例包括mail.example.com
或102.15.63.233
。这个很有效,除了当隐藏段附加到 URL 时,就像这样mail.example.com/bin/
。这会转到我自定义的 404 错误页面,除其他内容外,该页面看起来很糟糕,因为所有样式表和其他资产(图像等)都无法解析,因为 URL 被阻止并返回 400。更糟糕的是,它会在 PCI DSS 扫描中触发错误,因为他们认为我允许目录浏览。
我几乎花了一整天的时间在 Google 上搜索我能想到的所有可能的方法,但都无功而返。哦,这样做的原因是无效的 HOST 标头不能被用来欺骗我们的网站重定向到恶意网站(许多其他重写规则都依赖于此功能)。我希望这里有人能给出答案。