SSIで躓きました・・・(;;)

[上に] [前に] [次に]
なべちゃん 1998/08/24(月) 14:54:44
htmlと同じ階層から <!-- #exec cmd="aaa.pl"--> で呼び出すのはOKなんですが、一階層下から <!-- #exec cmd="../aaa.pl" --> とすると何も起こらないんです。そういう仕様なのでしょうか? それとも、別の方法でなければならないのですか? 教えてください。

SHUICHI.T [E-Mail] [HomePage] 1998/08/24(月) 17:01:17
<!--#exec cmd="../aaa.pl" -->
の "../aaa.pl" の直後のスペースは単なる書き間違えでしょうか?

なべちゃん 1998/08/24(月) 18:25:13
書き間違いです。実際は詰まってます。"../aaa.pl" という相対パス表記に問題があるようなのですが、、、

織田信長 1998/08/24(月) 19:54:01
ファイル名がaaa.plということはperlスクリプトだと思います。
そこで臭いのが、スクリプトの中で

$file = 'log.dat';
open(LOG,"$file");

みたいことしてませんか?
私も以前このケースで引っかかりました。
一応、同じケースだという仮定でお答えします。

SSIで指定されたaaa.plは、当然叩かれた場所(この場合、aaa.plが置いてある一個下のディレクトリ)を基点にして実行されます。
ここで注意が必要なのが、現実にはlog.datは上のディレクトリに置いてあるということです。
しかし、スクリプトにとってのカレントは下ですから、当然File Not Foundとなるのです。
この説明でお分かりでしょうか?スクリプト言語特有の現象です。

対策としては、

・C言語などでコマンドを作る。
・絶対パスを使う。
・パスは引数で渡す。

などでしょうか。

匿名希望 1998/08/24(月) 21:34:57
>SSIで指定されたaaa.plは、当然叩かれた場所(この場合、aaa.plが置いてある一個下のディレクトリ)を基点にして
>実行されます。

SSI一般ではなく、cmd引数で呼んだ場合ですね。

cmd引数で呼ぶとCGI変数が取れないので、cgi引数で呼ぶことも
考えるとよいでしょう。(少なくとも僕はcmd引数は使わない。)

>この説明でお分かりでしょうか?スクリプト言語特有の現象です。
>対策としては、
>・C言語などでコマンドを作る。

「スクリプト言語」の定義はともかく、なにもPerlでは起きてCでは
起きないということはないでしょう。これは無関係ですね。

SSIはセキュリティーホールになるので、色々制限を加えている
プロバイダーが少なくないですが、絶対パスや../式で上位の
階層を呼べないようにしているところもあります。これを許すと、
SSIのセキュリティーホールを突いて/usr/sbin/など好きなところ
の実行ファイルを実行されかねないので、それを嫌ったのでしょう。

かりに/home/foo/public_htmlにスクリプトがあるとして、
'../../usr/sbin/'で'/usr/sbin/'にたどり着く。

匿名希望 1998/08/26(水) 10:31:59
>これを許すと、SSIのセキュリティーホールを突いて/usr/sbin/
>など好きなところの実行ファイルが実行される

これは、そのページの所有者によって、ということではなく、外部の
クラッカーによって、ということでしょう。例えば掲示板で不用意に
もSSIが使えるようになっていると、部外者がそのことを利用して掲
示板にSSI命令を書き込むことになる。

[上に] [前に] [次に]