我正在尝试强制执行互斥的写入和执行策略。由于解释器只需要读取权限即可执行文件,因此避免加载不受信任的 php 代码变得非常棘手。
因此,本质上,如果解释器可以打开 php 文件进行写入,或者该文件由运行 php 进程的用户拥有(即可以更改权限以具有写入权限),我想停止加载文件。有谁知道有什么方法可以实现这一目标吗?
这可能仅在托管类型环境中有意义,其中上传合法 PHP 代码的用户和 PHP 解释器的用户是不同的用户。因此,这可能需要一些配置选项,因为该限制仅在某些配置中才有意义,并且直接违背了我在此事上可以找到的所有“最佳实践”建议。
最佳答案
有一种比担心文件系统权限更简单的方法来实现此属性:
- 将所有代码发送到 Phar(PHP 存档)中。
- 使用 digital signature for your Phars .
默认情况下,PHP 将 PHP 存档视为只读。请参阅SitePoint's guide用于从 PHP Archive 提供网站服务。
但是,即使有人可以通过错误配置、使用数字签名(私钥不得存储在网络服务器上,只能存储公钥)来规避 PHP,他们也无法篡改 Phar(除非他们窃取您的私钥)。
<小时/>此外,Snuffleupagus似乎有助于锁定 PHP 脚本允许执行的操作。
关于php 安全 - 防止加载可写的 php 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49940812/