如何在不允许下载的情况下提供 php 页面?

How to serve php pages without allowing them to be downloadable?

我对 linux 上的 Apache 服务器有疑问: 如何让 apache 使用 .php 文件为相应的 http 页面提供服务,同时仍然防止第三方使用 wget 下载相同的 .php 文件?

我想这可能涉及文件所有权、文件权限、php 配置和 apache 配置。

这是我发现我的 php 代码被暴露之前的情况:

我在 centos 8 服务器上安装了 Apache 2.4.37,还有 PHP 7.2.33

我在 /var/www/html

中有一个 hello world test.php php 文件
$ls-l 
-rw-r--r--.  1 root   root         75 31 août   2020 test.php

当 我愿意

  1. 使用 Firefox 转到 siteurl/test.php, 我收到正常回显的 hello world 消息。

问题是我可以从另一台电脑上下载源代码 2)

wget 'siteurl/test.php' 

在终端 我觉得它不是很安全,因为数据库凭据可以在 php 文件中,如 config.php;一般来说,如果可能的话,我想隐藏我的代码。

我试图解决编辑问题 httpd.conf:

我添加了以下几行

<Files ~ "\.php$>
<RequireAll>
    Require all denied
    Require not user apache
</RequireAll>
</Files>

(用户和组设置为apache)

我重启了httpd 现在 当我做 1), 我收到消息

Forbidden You don't have permission to access /test.php on this server."

当我执行 2) 时,出现 403 错误。

所以问题并没有真正解决,

我希望 1) 像以前一样行事,2) 像现在一样行事。

感谢您的帮助,

最佳。

您的 apache.conf 是否包含这些行?

AddHandler php-script .php
AddType text/html .php

他们应该告诉 Apache php 脚本应该由 PHP 模块处理,而不是像其他文件一样下载。

您的 Require 规则拒绝访问所有带有 .php 扩展名的 URL,而不仅仅是阻止它们的下载。这是您要实现的目标的错误解决方案。