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命令を書き込むことになる。
[上に]
[前に]
[次に]