将所有 Apache 2.2 403 Forbidden 重定向到 404 Not Found

Posted

技术标签:

【中文标题】将所有 Apache 2.2 403 Forbidden 重定向到 404 Not Found【英文标题】:Redirect all Apache 2.2 403 Forbidden to 404 Not Found 【发布时间】:2014-05-11 06:38:57 【问题描述】:

我需要将 Apache 2.2 服务器上的所有请求重定向到任何提供 403 到 404 未找到的目录。

例如:

/xyz/xyz/ 抛出 403 -> 重定向到 404 /xyz/sometext.txt 正常返回。

环顾四周,我发现了这个帖子:

Problem redirecting 403 Forbidden to 404 Not Found

RedirectMatch 404 ^/include(/?|/.*)$

/include 404 (instead of 403)
/include/ 404
/include/config.inc 404 (instead of 403)

但是,最后一种情况也返回 404。此外,它只影响 /include/ 目录,我一直在寻找任何被禁止的目录。到目前为止,我有:

RedirectMatch 404 ^[\/[\w+]]+\/$

有人知道如何实现这一点吗?谢谢,

【问题讨论】:

为什么不直接使用ErrorDocument 403 /404.html?然后你可以让它说出你想要的任何东西。 这适用于最终文档,但我相信标题仍保留为 403。所以自动攻击甚至不会分阶段进行。 【参考方案1】:

要为今天导致 403 的任何请求返回 404 not found,您可以这样做:

ErrorDocument 403 /404.php

然后在/404.php 中添加此行以向客户端返回 404 状态:

<?php
# your custom 404 content goes here

# now make it return 404 status to browser
http_response_code(404);
?>

要为所有对目录的请求返回 404,您可以执行以下操作:

RewriteEngine On

RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^ - [L,R=404]

【讨论】:

这行不通,因为它只是用 404 覆盖 403 文档,精明的攻击者仍然能够分辨响应标头中的差异。 它回答了您的问题,即 Redirect all Apache 2.2 403 Forbidden to 404 Not Found。防御攻击等毫无疑问。攻击者如何通过查看返回 status=404 的响应标头并呈现自定义 404 文档的内容来了解​​差异。如果您进一步澄清您希望从这个 404/403 处理中获得什么确切行为,我可以尝试解决这个问题。 基本上,使用正则表达式将 Apache 服务器上的所有 403 响应替换为 404,而不仅仅是替换错误文档。如果只是替换错误文档,头部仍然会显示资源被禁止。 不,这是不正确的。再次阅读我的答案。替换错误文档只是其中的一部分。它还通过使用http_response_code(404); 将状态码替换为 404,因此客户端永远不会知道它最初是 403。 那是专门使用php的。我问的是使用 .htcaccess 文件进行重定向。【参考方案2】:

只要您的 403 错误文档在限制区域内,它就永远不会显示,它必须在访问拒绝区域之外。

【讨论】:

以上是关于将所有 Apache 2.2 403 Forbidden 重定向到 404 Not Found的主要内容,如果未能解决你的问题,请参考以下文章

Apache 2.2 PHP-FPM,php文件在浏览器中禁止403禁止

c语言电脑上下载word时出现403forbiddwn怎么办

spring security 在使用 AJAX 登录时显示 403 错误

ASPX 和 IIS 8.5 - 403 禁止错误

WAMPSERVER 403 禁止 Apache 2.4.18

Apache 403 禁止从所有 <Directory> 允许 - 虚拟主机 [重复]