[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
>