为什么PHP中的phar写支持特别受到限制?

为什么PHP中的phar写支持特别受到限制?,php,security,phar,Php,Security,Phar,PHP有phar.readonly设置,默认为启用,只能通过配置文件禁用 此选项禁用使用Phar流或Phar对象的写支持创建或修改Phar存档。应始终在生产机器上启用此设置,因为phar扩展方便的写支持可以在与其他常见安全漏洞结合时直接创建基于php的病毒 在这种情况下,默认写块支持的原因是什么 有更通用、更容易使用的PHP编写方法,从安全角度看,Phar编写支持的“方便性”到底是什么,这使得它很危险?如果您需要在没有readonly set的情况下编写,那么您可以使用ZIP或GZ容器。有关更

PHP有
phar.readonly
设置,默认为启用,只能通过配置文件禁用

此选项禁用使用Phar流或Phar对象的写支持创建或修改Phar存档。应始终在生产机器上启用此设置,因为phar扩展方便的写支持可以在与其他常见安全漏洞结合时直接创建基于php的病毒

在这种情况下,默认写块支持的原因是什么


有更通用、更容易使用的PHP编写方法,从安全角度看,Phar编写支持的“方便性”到底是什么,这使得它很危险?

如果您需要在没有readonly set的情况下编写,那么您可以使用ZIP或GZ容器。有关更多信息,请参阅

从黑客的角度来看,拥有PHAR readonly可以有效地将其锁定。如果您的Web版本的PHP(mod_PHP、PHP cgi或其他)具有默认值,那么这就很难破坏基于Phar的应用程序,因为在执行过程中可以覆盖
Phar.readonly=1

还有一个性能优势,即文件只通过R/O打开,web请求(本质上可以是并发的)可以访问和使用Phar,而无需文件锁定


通常,您将使用@scribu描述的CLI包装器在测试配置上构建Phar,并通过将Phar复制到相关的应用程序目录将其安装到可公开访问的web服务上

您还可以通过CLI arg禁用它:
php-dphar.readonly=0 build phar.php
注意,如果您只想使用phar创建(非可执行)归档文件,您仍然可以使用
phar.readonly
设置的任何值。这并不能完全回答我的问题,这就是为什么phar写的东西被认为更容易被利用,以及它是如何使病毒产生的?我做了,但这是含蓄的。如果一个PHP脚本包含一个漏洞,使黑客能够破坏执行,那么她或他可以控制并覆盖应用程序的某些部分,从而创建一个后门。如果面向web的PHP具有
phar.readonly=1
,则黑客无法覆盖应用程序代码。这样的写入会引发异常
ini\u set()
也不起作用,因为执行无法将值降低到PER\u SYS值以下。