今回は、LinkStationを使って作成したLAN内WebサーバでCGI(Perl)を動かして、ファイルの入出力の行えるディレクトリを調べてみました。
LinkStation内のディレクトリ構成は以下のようになっています。
LS-VL121 (リンクステーショントップ)
・web (Webサーバー公開ディレクトリ)
・・cgi-bin
・・htdocs
・・log
・・data
・webdata
※・はディレクトリの階層の深さを意味しています。
・が一つ増えると、その上の行のディレクトリの下にそのディレクトリが位置することを意味します。
Perlスクリプトは、「testwrite.cgi」という名前で「LS-VL121/web/cgi-bin」ディレクトリ内に設置します。
1.ファイルパスの指定なしの場合
以下のソースは簡単なファイルの書き込みを行うPerlスクリプトです。
#!/usr/bin/perl open(FH,">> data0001.txt"); print FH "test"; close(FH);
簡単に各行を説明すると
open(FH,">> data0001.txt");
FHというファイルハンドルで、data0001.txtというファイルを追記書き込みモード(">>")で開く。
print FH "test";
FHというファイルハンドルに対して、"test"という文字を書き込む。
close(FH);
FHというファイルハンドルで開いたファイルを閉じる。
という処理になっています。
この処理を実行した結果、このPerlスクリプトがあるディレクトリにdata0001.txtが作成されました。
2.「cgi-bin」の一つ上のディレクトリにある「data」ディレクトリの中にファイルを書き込んだ場合
「LS-VL121/data/data0001.txt」にデータを書き込むPerlスクリプト:
#!/usr/bin/perl open(FH,">> ../data/data0001.txt"); print FH "test"; close(FH);
この Perl スクリプトを実行した結果、目的通り「LS-VL121/data」内にdata0001.txtが作成されました。
この結果から、CGIの処理結果は「cgi-bin」ディレクトリ以外にも保存できることがわかりました。
3.リンクステーション直下の別のディレクトリにファイルを書き込んだ場合
「LS-VL121/webdata/data0001.txt」にデータを書き込むPerlスクリプト:
#!/usr/bin/perl open(FH,">> ../../webdata/data0001.txt"); print FH "test"; close(FH);
この Perl スクリプトを実行した結果、目的通り「LS-VL121/webdata」内にdata0001.txtが作成されました。
この結果から、CGIの処理結果はWebサーバー公開ディレクトリ以外にも保存できることがわかりました。
まとめ
- ファイルパスを省略して CGI を実行すると、CGIスクリプトが置かれているディレクトリに対してファイルの読み書きが行われる。
- Webサーバー公開ディレクトリ以外の場所にもファイルの読み書きが行える。
Webサーバー公開ディレクトリ以外の場所にもファイルの読み書きが行えるので、CGIスクリプトの作成・設置には十分気を付けないといけませんね。
うっかりすると、想定していないファイルに対してデータの読み書きを行ってしまうことで、情報の流出やファイルの破壊などを引き起こしてしまうかもしれません。
※本内容はネットワークの知識がある人向けに記載しています。
※ネットワークの構成によっては、セキュリティの脅威を発生させる可能性があるため、本内容を参考にする上では、セキュリティに十分配慮してください。
※CGIは構成によって重大なセキュリティ上の脅威を発生させます。十分な知識を持ったうえで、CGIを作成・設置してください。
※LinkStation には、Webサーバ機能を持つシリーズと持たないシリーズがあります。Webサーバ機能を利用したい場合には、購入するシリーズがWebサーバ機能をサポートしているかどうか事前にご確認ください。
コメントを投稿
コメント投稿機能について