[PHP-users 4355] Re: スクリプトが丸見え ?

Osamu Shigematsu php-users@php.gr.jp
Wed, 19 Dec 2001 11:39:42 +0900


重松です。

中村さん、コメントありがとうございます。

> 前にも同じ様な話がありましたが、nobody が .htaccess を読める状態に
> しなければいけない時点で防御策が基本的には無いはずです。suEXEC を
> 使える状態にし、cgi版のphpを使用するのならotherにReadを与える必要が
> なくなりますが…。

nobody が .htaccess を読める、という状態と、index.html などの他のファイルが
読める、というのに何らかの差異はあるのでしょうか?
(隠しファイルは扱いが異なる?)

>> 私が考えた解決方法としては、group に www を追加し、web page を公開する
>> ユーザのホームディレクトリのグループを www にして、アクセス権を 710 に
>> するとともに、group に nobody を追加、これで、丸見えを防げるのではないか、
>> と推測しているのですが、もっとよい方法があるのではないかと思いました。
> 
> ファイル名がわかってしまうので悪意ある利用者がそのファイルを保存する
> スクリプトを書けると思います。 open "http://読みたいファイル名"

> http経由ではなく、純粋にfull path記述しなければなりませんね。
> fopen "/home/user01/public_html/pass.php"
> という様に。

ですが、nobody に、というか、group www に、書き込み権限を与えなければ、
大丈夫だと思うのですが。。。

/home/foo                           foo.www 710
/home/foo/public_html               foo.www 710
/home/foo/public_html/index.html    foo.foo 644

というような権限ではダメなのでしょうか。

そうすれば、bar というユーザがいるとして、bar は /home/foo に対して、
実行権限がないため、中に入れないと思いますが、nobody は group www に属すので、
実行権限を持っており、/home/foo/public_html を開くことができますよね?
その中実は、通常 644 だと思いますから、読むことはできる状態だと思います。

もちろん、ログなどの PHP から書き込むデータについては、full path がわかれば、
他のユーザのスクリプトから読み書きできる危険は排除できませんが。。。

そして、これら危険は、ZEND encoder でもで、コードそのものを隠蔽しないと、
たとえ DB に書いても、DB の ID, password がばれてしまえば、元も子もないので、
結局とっても危険という結論に達しますね。

-- 
Osamu Shigematsu

http://www.ravi.ne.jp/%7eshige/
mailto:shige@ravi.ne.jp