当用户尝试手动浏览我的网站上的任何“.php”扩展名时,我怎样才能返回 404?

当用户尝试手动浏览我的网站上的任何“.php”扩展名时,我怎样才能返回 404?

我使用 PHP。我喜欢隐藏我的使用。我以前将所有 PHP 都放在文件中,但坦率地说,我必须重新配置我使用的每个编辑器/工具(实际上指的是 PHP 文件),.html这很烦人。.html

所以我把它们全部移到了 .php,就像一个成年人一样。

无论如何,扩展都是隐藏的try_files- 当我第一次出发时我并不知道这一点。

但是用户可以猜测www.domain.com/index.php,并且鉴于它加载正常,他们就会知道该网站是使用 PHP 构建的。

虽然是小问题,但我想解决它。但该怎么做呢?

server我天真地尝试了这个,靠近我的街区顶部:

location ~ (\.php$) {
    return 404;
}

但网站上的所有内容都变成了 404。我猜是因为位置与实际运行的脚本相匹配,而不是用户地址栏中的内容?

然后我注释掉了 404 行,它产生了一个很棒的 (/s) 效果,将我的后端代码作为下载发送给访问者,连同他们的 404 页面。我想是因为您只能匹配一个位置块,所以它匹配了,但之后什么也不做,只是提供代码?

呃。

在此之前我曾尝试过

if( $request_uri ~ '\.php$' ) { return 404 ; }

在我的server街区。但那似乎没有任何效果。

鉴于我造成的灾难,我决定向专家请教……

谢谢你!

答案1

不要。有几种方法可以解决这个问题:

  1. 放弃。让人们做你想避免的事情。缺点可以忽略不计;任何有价值的攻击者都不会被你做的事情打败。
  2. 用一个URL 重写以重写 URL因此人们在浏览器中看到的内容与文件名不对应。将文件保留为foo.php,但将 URL 重写为example.com/foo.html

对于 #2,类似

rewrite ^(.*)\.html$ $1.php last;

应该可以工作。

相关内容