
この記事言うには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
、比較すると最初の数文字2 つの値の。 path_translated
akaの最初の文字SCRIPT_FILENAME
はスラッシュなので、opcache.restrict_api=1
一致しません(/
!=1
)、したがって安全に使用できます。
また他にも使っている人がいますopcache.restrict_api=1
あまりにも。
どこか間違っている場合は訂正してください。それまでは、これで私の質問にほぼ答えられたと思います。