首先,如果由于我的知识不足而导致问题不清楚,那就很抱歉。
我很想知道 apache如何调用适当的引擎/调用程序来提供请求。假设,用户请求http://somesite.com/someurl.php
- 现在apache如何确定它需要启动PHP解释器? apache是否根据文件扩展名/ MIME类型或其他任何内容来确定?
我所知道的是:我可以配置apache来根据文件的扩展名调用某些解释器,例如:
AddHandler cgi-script .cgi .py
# Tells apache to treat .cgi & .py files to treat as cgi scripts
为什么我关心它?最近,我从我的问题(PHP file upload: mime or extension based verification?)中了解到,如果某个用户上传的文件具有错误的MIME类型(即image/jpeg
),但扩展名为.php
,则该文件可能会被执行(假设它已获得执行权限)并且EXIF元数据中包含的恶意php代码可以做有害的事情。
答案 0 :(得分:1)
完全取决于服务器的配置方式。默认情况下,Apache始终使用默认处理程序,该处理程序仅提供文件内容。但是,您可以使用SetHandler
指令更改它。该指令可以放在配置中的任何位置,包括<Files>
或<Directory>
或<Location>
块,从而可以根据文件系统路径,URL前缀或几乎设置处理程序Apache可以访问的任何其他变量。
特别是 common 根据文件扩展名设置处理程序,因此Apache提供AddHandler
指令作为执行此操作的快捷方式。
有关详细信息,请查看the handler documentation。
P.S。对于它的价值,文件系统通常不存储MIME类型数据,因此Apache通常必须通过检查扩展名来猜测文件的MIME类型。