我的目标是减少应用程序签名的可见性。这不是默默无闻的安全措施,而只是深度的表面防御,因此,乍一看,攻击者无法分辨出它是否是静态站点。(还具有外观美感;即使应用程序在正常操作中永远看不见,也可以隐藏应用程序详细信息,这让用户感觉“更干净”)。因此,我想拒绝访问某些目录而不显示它们的存在,因此如果用户请求不存在的页面,我必须给出我的应用程序给出的完全相同的404响应。
在一个.htaccess
文件中,我具有以下内容:
RewriteEngine on
RewriteCond "%{REQUEST_FILENAME}" "!-f"
RewriteCond "%{REQUEST_FILENAME}" "!-d"
RewriteRule "^(.*)" "index.php?page=$1"
RewriteRule "^(secret_dir1|secret_dir2)(/.*)?$" "index.php?page=404"
其中index.php
根据“ page” GET参数的值呈现漂亮的漂亮网页;如果“页面”与应用程序级别的页面不对应,或者“页面”设置为404,则脚本将渲染一个漂亮的404页面,其中包含适当的标题和所有内容。
这是问题发生的地方。“应用程序级” 404按预期工作;呈现404页面。但是,如果用户请求mydomain.com/dir_i_am_trying_to_hide
,他们将获得301重定向到mydomain.com/dir_i_am_trying_to_hide/?page=404
:外部重定向,而不是内部重写。
为什么发送外部重定向而不是仅重写url?我应该如何正确避免这种情况?除此以外,是否有办法强制服务器执行内部重写?(Apache文档似乎表明您可以将RewriteRule强制设置为外部,但不能强制这样做)
原来我的重写规则没有引起外部重定向;阿帕奇的DirectorySlash
是;我会查询hostname/secret_dir1
,并将重定向发送到hostname/secret_dir1/
。
我不确定为什么查询字符串被更改了,但是添加了对其进行了DirectorySlash off
修复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句