PHP有phar.readonly
设置,默认开启,只能通过配置文件关闭。
此选项禁用使用 phar 流或 Phar 对象的写入支持创建或修改 Phar 档案。此设置应始终在生产机器上启用,因为 phar 扩展方便的写入支持在与其他常见安全漏洞结合使用时可以直接创建基于 php 的病毒。
在这种情况下,默认阻止写入支持的原因是什么?
有更多通用和现成的 PHP 编写方法,Phar 的写入支持的“便利性”究竟是什么,这从安全角度来看是危险的?
PHP有phar.readonly
设置,默认开启,只能通过配置文件关闭。
此选项禁用使用 phar 流或 Phar 对象的写入支持创建或修改 Phar 档案。此设置应始终在生产机器上启用,因为 phar 扩展方便的写入支持在与其他常见安全漏洞结合使用时可以直接创建基于 php 的病毒。
在这种情况下,默认阻止写入支持的原因是什么?
有更多通用和现成的 PHP 编写方法,Phar 的写入支持的“便利性”究竟是什么,这从安全角度来看是危险的?
如果您需要在没有设置只读的情况下编写,则可以使用 ZIP 或 GZ 容器。有关更多信息,请参阅Phar、Tar 和 Zip 的头对头比较。
从黑客的角度来看,拥有只读的 PHAR 可以有效地将其锁定。如果您的 Web 版本的 PHP(mod_php、php-cgi 或其他)具有默认值,那么这使得破坏基于 Phar 的应用程序变得非常困难,因为phar.readonly=1
可以在执行期间被覆盖。
还有一个性能优势在于文件仅以 R/O 方式打开,并且 Web 请求(本质上可以是并发的)可以在没有文件锁定的情况下访问和使用 Phar。
您通常会使用 @scribu 描述的 CLI 包装器在您的测试配置上构建 Phar,然后只需将 Phar 复制到相关的应用程序目录即可将其安装到您可公开访问的 Web 服务上。