如何防止 PHP 文件被下载?有人可以通过哪些方式下载它们?

Posted

技术标签:

【中文标题】如何防止 PHP 文件被下载?有人可以通过哪些方式下载它们?【英文标题】:How to prevent PHP files from being downloaded? And what are some ways someone can download them? 【发布时间】:2021-09-07 00:16:46 【问题描述】:

如何防止 php 文件像通过浏览器一样被“非法”下载。还有哪些方法可以用来下载 php 文件?

【问题讨论】:

你到底是什么意思?您是指请求文件的 PHP 源代码吗?在正确配置的浏览器上,这不会发生。 @Pekka:当然不是浏览器需要正确配置以防止这种情况发生...... 有人告诉我文件可以通过浏览器下载... 如果您使用安全服务器,这可能是不可能的,对吧? @AAA,在大多数情况下,PHP 无法下载。您最好担心脚本中的 FTP 或文件上传功能等服务。人是 ICT 安全中最危险的,密码应该是随机的,而不是像“苹果”这样的东西。要完成这个故事,xkcd about Security。 【参考方案1】:

如果您的应用程序不安全,您将无法真正避免文件被下载。以下示例允许恶意用户查看您服务器上的任何文件:

<?php
readfile($_GET['file']);
?>

如果您想防止 Apache 在 PHP 出现问题时暴露源代码,请将其添加到您的 httpd.conf / .htaccess 中:

# In case there is no PHP, deny access to php files (for safety)
<IfModule !php5_module>
    <FilesMatch "\.(php|phtml)$">
        Order allow,deny
        Deny from all
    </FilesMatch>
</IfModule>
# the following should be added if you want to parse .php and .phtml file as PHP
# .phps will add syntax highlighting to the file when requesting it with a browser
<IfModule php5_module>
    AddType text/html .php .phtml .phps
    AddHandler application/x-httpd-php .php .phtml
    AddHandler application/x-httpd-php-source .phps
</IfModule>

【讨论】:

感谢您的回复。我如何将它包含在 php 文件中,只需以相同的方式复制和粘贴它,还是我必须做其他事情?换句话说,如果服务器是安全的,你是说无论如何没有人可以下载文件? @AAA:这与 PHP 脚本本身无关。它属于您的 apache 配置。 @AAA 放松。有可能根本没有问题。每个配置为解析 PHP 文件的普通服务器都不会让人们下载 PHP 源代码。 @pekka 在这种情况下我已经设置好了,我使用的是 rackspace 高级版。 @Lekensteyn 我现在才看到并欣赏您的建议。 很好! 第一个 IfModule 非常适合作为任何项目的标准 .htaccess 以确保完全安全【参考方案2】:

在正常情况下,没有人能够下载 PHP 源代码,因为它是在服务器上执行的。网络服务器识别 PHP 脚本并将它们传递给 PHP。然后将结果传递回请求用户的浏览器。你描述的情况,只有在webserver配置真的搞砸的情况下才能实现。

【讨论】:

如果我还有选票,我会 +1 - 这可能就是要说的一切,可能根本没有问题 "在正常情况下" - 额外的safe guard 总是有用的,以防出现真的出现问题。 (汽车不应该撞车,但万一撞车,司机会有安全带和安全气囊保护他) @Lekensteyn:你是对的。正如我在问题的 cmets 中所说,我真的很喜欢你的解决方案。【参考方案3】:
<?php
header('Content-disposition: attachment; filename=http://www.victim.com/phpfile.php');
header('Content-type: application/pdf');
readfile('http://www.victim.com/phpfile.php');
?> 

【讨论】:

【参考方案4】:

在正常情况下,没有人能够下载PHP源代码(与其他答案相同),但是如果您有一个扩展名不同的文件示例:page1.bak并且您有一个page1.php,则page.bak如果您只是输入 url ht..//.../page1

,就会被下载

我已经用 PHP 版本 5.3.10-1ubuntu3.2 和 Apache/2.2.22 确认了这一点 总之,避免将您的配置或测试文件放在生产目录中,除非您希望它们以原始状态下载。

还应在 apache2.conf 或 httpd.conf 中禁用 Option Multiview 以避免默认返回“近似”文件名。

【讨论】:

【参考方案5】:

您永远不会从运行 php 的 Web 服务器下载 php 文件。您可以下载从 php 传递的 HTML,就像在这个答案中一样。你没有得到 php 脚本,你得到的是 HTML + javascript(如果有的话)

<?php
header('Content-disposition: attachment;
filename=http://www.victim.com/phpfile.php');
header('Content-type: application/pdf');
readfile('http://www.victim.com/phpfile.php');
?> 

【讨论】:

以上是关于如何防止 PHP 文件被下载?有人可以通过哪些方式下载它们?的主要内容,如果未能解决你的问题,请参考以下文章

php如何防止网站内容被采集

如何防止人们访问 phpmyadmin?

网站被植入了php寄生虫木马,天天生成垃圾页面。请教各位大神如何查找并删除寄生虫木马?

pgp如何打开

防止直接 url 访问 php 文件

如何判断哪些 PHP 文件实际被使用,哪些没有? [关闭]