本文说有opcache_get_status()
启用会存在安全风险。要关闭它,必须进行配置opcache.restrict_api
,但我找不到如何操作的示例。
这个人当配置为时,限制生效opcache.restrict_api=/restricted
,这给了我一个线索,它需要是一条路径。
我首先创建了一个带有opcache_get_status()
调用的测试脚本,并在该系统上得到了大量 PHP 脚本的输出,确认没有限制。然后我将我的编辑/etc/php/7.3/fpm/php.ini
为opcache.restrict_api=/dev/null
,并且相同的调用现在返回bool(false)
- 我认为限制已启用。
我的目标是完全禁止opcache_get_status()
和类似的事情,并且通过“允许”下的脚本/dev/null
,我基本上使其无法使用,因为你不能在那里保存文件。
- 这个逻辑正确吗?
- 我是否应该使用其他路径?
- 有没有办法直接启用限制,而不用弄乱虚假路径?
谢谢
答案1
查看源代码ext/opcache/zend_accelerator_module.c
- 对于“泄露”的信息,
validate_api_restriction()
需要返回true
。 - 在该函数本身,这需要
SG(request_info).path_translated
(显然,等于SCRIPT_FILENAME
) 和与之匹配restrict_api
,比较前几个字符两个值。 path_translated
由于aka的第一个字符SCRIPT_FILENAME
是斜线,opcache.restrict_api=1
因此不会匹配它(/
!=1
),因此看起来可以安全使用
还这是其他人使用opcache.restrict_api=1
也。
如果我哪里错了,请纠正我!到那时,我觉得这基本上回答了我的问题。