[PHP-users 3859] Re: PHPのセキュリティモデルについて

SAKAMOTO php-users@php.gr.jp
Mon, 26 Nov 2001 15:29:34 +0900


坂本です。

セキュリティはほとんどプログラムのコードレベルによるものが
多いような気がします。

たとえば下のようなソースで考えてみました。

ソースを見ると...

if ($submit)
{
$connection = mysql_pconnect(SQL_SERVER, SQL_UID, SQL_PWD);
mysql_select_db(SQL_DB, $connection);
$sql = "UPDATE user SET
desc_one='".addslashes($desc_one)."',photo_one='".addslashes($picture_name).
"' WHERE userid='userid'";
mysql_query($sql);
exec("cp $picture /root/lets/play/folder/tag/images/$picture_name");
return 0;
}

ここで危険な部分は

exec("cp $picture /root/lets/play/folder/tag/images/$picture_name");

です。
これは非常に危険な書き方です。

もし UNIX , LINUX システムであれば ; で多重コマンドの実行が可能です。


cp $picture /root/lets/play/folder/tag/images/$picture_name

を実行する文字列に ; をいれて
cp picture /tmp/picture_name;cat /etc/passwd > /tmp/passwd.txt

このようにコマンドを作ることが出来ます。

上のコマンドをシェル上で実行してみてください。
すると作動と同時に /tmp/passwd.txt というファイルが作成され、
/etc/passwd というファイルをコピーしたのと同じになります。

さらに考えてみるとローカルアタックソースもアップロードできる
コマンドを作ることが出来ます。

拡張子を gif にしてアップロードして指定したディレクトリで /tmp
ディレクトリにコピーしてそのファイルをコンパイルして(上の多重コマンドで)

実行することが出来ます。

このような方法ではなくファイルアップロードは

is_uploaded_file
move_uploaded_file

このようなPHP関数を使い、

もしアップロードしたファイルを削除するときは

rm -rf /ディレクトリ/ファイル名
ではなく

unlink

を使用すればより安全になります。

このようにソースの書き方によってほとんどのセキュリティ問題は
解決できるのではないかと思います。


RisaPapa
http://www.osask.net




----- Original Message -----
From: "Ryuichiro Munechika" <munetika@niji-net.com>
To: <PHP-users@php.gr.jp>
Sent: Monday, November 26, 2001 1:02 PM
Subject: [PHP-users 3852] PHPのセキュリティモデルについて


>  まいパパです
>  こんにちは^^
>
>  昨日、関西のLinuxコミュニティ(lilo)で月例のセミナーの中で
> 初心者向けのPHPセミナーを行ったのですが、終わってからの懇親
> 会の席で、「PHPってJavaやRubyのようなセキュリティモデルって
> あるんですか?」と聞かれてしまいました。
>
>  私は知らなかったので答えようがなかったのですが、実際はどう
> なんでしょうか?
>
>  もし無ければ、今後実装されていく可能性はあるんでしょうかね?
>
> --
> 宗近 龍一郎(まいパパ)
> 大阪府寝屋川市
> munetika@niji-net.com
> http://www.niji-net.com
> 緊急用:phs@niji-net.com(PHSにも転送されます)
> _______________________________________________
> PHP-users mailing list
> PHP-users@php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
>