0

fopen('/ dev / urandom'、'rb')は、さまざまな理由で失敗する可能性があります。おそらく、「open_basedir制限が有効になっている」か、/ dev / *アクセス許可によってfopen()による読み取りが許可されていない可能性があります。

問題は...mcrypt_create_ivは/dev/urandomを使用します。

https://github.com/php/php-src/blob/master/ext/mcrypt/mcrypt.c#L1391

私の質問は...fopen()が失敗した場合でも、mcrypt_create_iv()は機能しますか?

open_basedirの制限については、私の仮定は「はい」ですが、それが許可である場合はどうなりますか?fopen()に/ dev / urandomを開くために必要な権限がない可能性があるが、mcrypt_create_ivにはできる状況はありますか?

4

2 に答える 2

1

パーミッションは機能に割り当てられません。ユーザー、グループ、またはワールド メンバーシップに基づいてプロセスに割り当てられます (ACL を使用している場合は、より細かい制御で)。

そのため、プロセスfopen()が特定の ID で実行されている場合、またはmcrypt_create_iv()(open()下位レベルで使用する) でファイルを開こうとしても違いはありません。

もちろん、呼び出し元のプログラムmcrypt_create_iv()(プログラムなど) のアクセス許可が昇格されてsetuidいる場合、別のプログラムでは実行できないことを実行できる可能性があります。

于 2012-12-14T01:08:49.250 に答える
0

open_basedir制限が PHP モジュールの C コードに影響を与えるとは思いません。PHP スクリプト自体にのみ影響します。PHP スクリプトが使用されている場合chroot()、または PHP が chroot 監獄で Apache モジュールとして実行されている場合、このようなスクリプトとモジュールの両方に影響します。刑務所は持っている必要があり/dev/urandomます。

アクセス許可/dev/urandomが制限される可能性はありますが、その可能性は非常に低いと思われます (なぜそんなことをする人がいるでしょうか?)。

于 2012-12-14T02:25:55.057 に答える