Apache 在扩展名前附加 .php 的文件中执行代码,例如: .php.txt 、 php.pdf

Posted

技术标签:

【中文标题】Apache 在扩展名前附加 .php 的文件中执行代码,例如: .php.txt 、 php.pdf【英文标题】:Apache executes code in files that have .php prepended before extension ex: .php.txt , php.pdf 【发布时间】:2021-04-13 22:47:37 【问题描述】:

我能做些什么来阻止 Apache 在扩展名前附加 .php 的文件中执行代码 ex: .php.txt , php.pdf ,我不知道这是否与 webuzo 管理面板 n/或 apache 相关?

Apache 2.2.34 版

在webuzo论坛上打开线程,如果其他人有这个问题,它可能是相关的: https://www.softaculous.com/board/index.php?tid=17642

【问题讨论】:

不应与 apache 相关,除非您修改了处理程序。 我没有修改任何与 handler/s 相关的内容......我什至卸载并重新安装了 apache。 【参考方案1】:

这是相当标准的行为 - files can have multiple extensions on Apache。 (他们可以在other OS / filesystems 上。)

但是,这种行为是可以避免的。

是否为 PHP 处理以 .php.txt.php.pdf 结尾的文件取决于服务器上 PHP 的启用方式。

例如,如果您只是使用AddHandler,那么任何包含.php 扩展名的文件(如.php.txt)都将由PHP 处理程序处理:

AddHandler application/x-httpd-php .php

但是,如果您只在特定文件模式上调用SetHandler,即。当.php出现在文件名的末尾时,则可以避免这种行为。

<FilesMatch "\.php$">
    SetHandler application/x-httpd-php
</FilesMatch>

注意:这不是一个复制/粘贴解决方案 - 它实际上取决于 PHP 在您的 Apache Web 服务器上的实现方式。

根据您的要求,您可能会阻止对包含 .php 扩展名但不在 URL 路径末尾的文件的请求。例如:

<FilesMatch "\.php\.">
    Order Allow,Deny
    Deny from all
</FilesMatch>

注意:这是 Apache 2.2 语法(如问题中所述)。如果您使用的是 Apache 2.4,那么您将使用 Require all denied 而不是最后一个块中的 OrderDeny 指令。

【讨论】:

以上是关于Apache 在扩展名前附加 .php 的文件中执行代码,例如: .php.txt 、 php.pdf的主要内容,如果未能解决你的问题,请参考以下文章

Apache FilesMatch:如何仅匹配附加时间戳的资产

Apache .htaccess 重写规则以删除 .php 文件扩展名

47文件上传篇—Apache漏洞原理

Ubuntu16.04 下安装PHP+apache2+mysql以及MySQL扩展

php 扩展模块如何安装

apache_conf 从PHP文件中删除.php扩展名,例如yoursite.com/wallpaper.php到yoursite.com/wallpaper