[PHP-users 10900] Re: スクリプトがrpm からのインスートルでは動いてソースからだと正しく動きません

Yasuo Ohgaki php-users@php.gr.jp
Wed, 16 Oct 2002 18:14:47 +0900


大垣です。

Osamu Shigematsu wrote:
> とくに、PHP の場合、「適当に書く」時に使うものなので、
> 安全にコーティングができるそういう仕組みがあること自体がありがたいです。

PHPはとにかく早く動作するアプリを作りたいと言う時に便利
ですが、いい加減すぎるスクリプトが多いと困りますね。

PosgreSQLユーザーの方はpg_convert()を活用する事で、SQL
インジェクションを確実かつ簡単に防げる様になります。

# SQLインジェクションと言う言葉を聞いた事がない方は、必ず
# 勉強される事を強くお勧めします。直接攻撃ができるので、
# クロスサイトスクリプティングより危険です。

> 
> # 例外 try{}catch{}finally{} とか、5 になれば、使えるのでしょうか。。。
> 

使えます。

try catchが使えなくても、エラー関数とバッファを使う
とシンプルかつ安全なWebアプリケーションが作成できます。
E_ALLにして、全てのエラーでアプリケーションが止まる様に
作った方が良いと言う事です。

色々考えてプログラム作らないと簡単に大穴付きのWebサイトに
なってしまいます。たとえば、以下のスクリプトは非常に危険です。

当たり前すぎて、役に立たないかもしれませんが、セキュリティー
上の問題点、すぐに解りますよね?

# イメージファイルを出力するスクリプト。単独で動作。

<?
header('Pragma: no-cache');
if (ereg(".jpg",$img))
   header("Content-Type: image/jpeg");
else if (ereg(".gif",$img))
   header("Content-Type: image/gif");
header('Expires: 0');

$fichier="logos/$img";

$fp=fopen($fichier,"r");
$image=fread($fp,filesize($fichier));
fclose($fp);

echo($image);
?>

出典:今日のBugTraq 「CoolForum v 0.5 beta shows content of PHP files」

タイトルは「PHPソースが見える」ですが、safe_mode=off,
open_basedir=無しの場合、Webサーバーがアクセスできる
ファイルは全部見れます。

--
Yasuo Ohgaki