
本文說有opcache_get_status()
啟用是一個安全風險。要關閉它,必須進行配置opcache.restrict_api
,但我找不到如何操作的範例。
這個人當配置為 時,限制生效opcache.restrict_api=/restricted
,這給了我一個線索,它需要是一個路徑。
我首先透過呼叫建立一個測試腳本opcache_get_status()
,然後在該系統上獲得了許多 PHP 腳本的輸出,確認沒有任何限制。然後我編輯了 my /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
也。
如果我有說錯的地方請指正!在那之前,我覺得這幾乎回答了我的問題。