将所有 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 错误