- ベストアンサー
ログファイルって情報が漏れるのでしょうか?
CGIでログファイルを使用していますが、ログファイルの中身が外部から盗まれることってあるのでしょうか?あるとすればどのように対策すればよいのでしょう?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
補足に対してです。 質問の趣旨は分かっていりつもりですが、確認します。 サーバに何らかCGIがある。 そのCGIは誰でもアクセスできる。 しかし、ログファイルは、内容を盗まれないようにしたい。 ではないのですか? 掲示板に表示するための書き込みデータが格納されたファイルは、単なるデータファイルです。 ログファイルというのは、いつ、誰がftpしたか、とか、システムとして管理されるものです。 ですから、本来は、CGIとはまるで関係が無いのですが、egyptさんは、そのSystem Log fileではなく、単なるデータファイルのことを「ログファイル」言っているのだろうと思って回答をしています。 つまり、掲示板に表示するのは、そのログファイルの内容全てではなく、例えば、アクセス者のIPアドレスやドメインなどの情報も入っているので、ログファイルの内容をすべて見られるのはまずい。ということではないのですか? だから、CGIをドキュメントルートの下ではなく、CGI専用エリアに入れれば、単純にはアクセスされなくなると回答しています。 CGIプログラムも、そのデータファイルもドキュメントルートの下にあるなら、先に書いたように、そのファイル名を指定すれば見えてしまいます。 それから、管理者は、そのログファイルの内容をすべて見たいわけですから、管理者専用モードか、管理者専用CGIがあって、それでアクセスすれば全ての内容が見られるようにするのが普通です。 その場合、管理者だけにアクセスを許す仕組みとして、ベーシック認証を使うのが安全性が高くて簡単ですが、管理者用CGIにパスワード認証を入れても可能です。 しかし、パスワードだけでは適当に入力すれば見つかってしまうので、パスワードだけでなく、IDも組み合わせた方が良いでしょう。とのアドバイスです。 > ただ、直接URLを入力して読み出そうとすると ちょっと意味が分かりません。 http://www.xxx.yyy.jp/cgi-bin/userdb.dat といった形式でアクセスするという意味なら、それで読み出せるか、ダウンロードできますよ。 もしできなくて、「file not found」以外のエラーなら、ファイルは存在するがアクセスができないということなので、巡回ソフトを使えば簡単にダウンロードできます。
その他の回答 (3)
- Spur
- ベストアンサー率25% (453/1783)
補足について httpdとは、webサーバとも言い、htmlやcgiを理解してブラウザに出力するための基本ソフトです。 Netscape社のEnterpriseやMicrosoft社のIISなどもありますが、OSがLinuxならApacheの可能性が高いですね。 cgiを置く位置は、cgi-binという名のディレクトリだろうとは思いますが、それがどこにあるかが問題です。 ドキュメントルートの下か、別のところかによって安全性も異なります。 URLで表現すれば、そのCGIをアクセスする時のアドレスが http://www.xxx.yyy.jp/cgi-bin/...... ならばドキュメントルートの下です。 別のところにおいてあれば、例えば、 http://cgi.yyy.jp/xxx/..... などとなります。 (注)「xxx」があなたのアカウントです。 先のドキュメントルートの下の場合は、上記のアドレスの後に、適当に文字をつけて、 http://www.xxx.yyy.jp/cgi-bin/data.dat http://www.xxx.yyy.jp/cgi-bin/userdb.dat などとすれば、その内に当たりになり、読み出すことが可能です。 ドキュメントルート以外に置いてあれば、このような指定の仕方だけでは読み出せません。 これらはhttpdの設定がどのようになているかで決まります。 >CGI自体の管理者パスワードやベーシック認証は気にしたことがありません それじゃあ、管理者でなくても誰でも読み出せてしまうということですか? 最低でも管理者用のIDとパスワードを入力しないと動作しないようにするべきだと思いますけど? それを、CGIにそのような機能を付けるか、Apacheのベーシック認証を利用するかの違いです。
補足
ものすごく誤解を与える質問をしてしまったのか、私の知識がなくとんちんかんなことをいっているのか分からなくなってきたので、もう少し詳細に説明します。 今回質問しているCGIは掲示板のようなものです。そこに書き込まれた内容をログファイル(テキストデータ)に記録し、それを読み出すというものです。 掲示板のようなCGIが置かれているURLはhttp://****.cgiで誰でも読み出せるようにしておくものだと思っていましたが、違うんでしょうか? CGIを置いてある場所はドキュメントルートの下になってますね~。 ただ、直接URLを入力して読み出そうとするとInternal Server Errorというものが表示されるので、これで大丈夫なのでしょうか? たびたびすいませんが、お分かりでしたら教えてください。
- Spur
- ベストアンサー率25% (453/1783)
あまりにも漠然とした質問なので、なんとも言えませんが、 (1)サーバのOSとhttpdは何ですか? (2)そのlogファイルはどこに置いてありますか? (3)そのlogを見るCGIがあると思いますが、そのセキュリティは? などを調べないと何とも言えません。 (1)がWindowsマシンで、IISなどを使っていれば最悪です。 (2)document rootの下にあれば技術的には可能です。 (3)CGI自体に管理者パスワードなどがあるだけか、ベーシック認証などを使っているか、によっても違います。 (2)で、document rootにあっても、(3)がしっかりしていれば、技術的には可能ですが、かなり高い知識と技術が無いと他人のサーバのファイルを見るのは難しいですね。 (3)が甘くても、document rootの下に無ければ、ほとんど不可能でしょう。 しかし、自分もftpなどでPCに持ってくる以外には見られません。 logファイルが見られても困ることはないと思うのですが、見せたくないのであれば、それほど難しくなくて、そこそこ安全なのは、(3)で、CGIのパスワードだけに頼らずに、ID+パスワード方式にしたり、一番良いのはベーシック認証にすることだと思います。 確実に安全にしたければ、document rootに置かないか、そもそもlogファイルをサーバに残さないことだと思います。
補足
ご回答ありがとうございます。 (1)サーバーのOSですが、Red Hat Linux 7.2というやつみたいです。 httpdとは何でしょう?知識がなくてすいません。 (2)ログファイルはサーバー会社よりcgiを置くように指定されたcgi-binの下にディレクトリを作成し、そこにおいてあります。 (3)CGIにはHTTP_REFERERを使って自分のホームページ以外からのアクセスをできないようにしているくらいです。 以上の内容ですが、いかがなものでしょうか? CGI自体の管理者パスワードやベーシック認証は気にしたことがありませんでしたが、どのようなものなんでしょうか?参考になるホームページ等ご存知でしたら教えてください。
- mld_sakura
- ベストアンサー率20% (264/1282)
だいたい以下のようなポイントがあります。 そのログファイル自体のパーミッションはどうなってますか? そのディレクトリは外部に公開されてますか? 一般的には、html_rootで定義されていないディレクトリに置けば問題ないでしょう。
補足
回答ありがとうございます。 ログファイルのパーミッションは666です。 サーバーはレンタルしているのですが、ログファイルはサーバー会社よりcgiを擱くために指定されているcgi-binの下にディレクトリを作成し、そこにおいてあります。 これで大丈夫でしょうか?
補足
毎度回答ありがとうございます 質問の内容はお察しの通りです。単なるデータファイルをログファイルと言っているだろうとまでわかって頂いて恐縮です。 ベーシック認証を調べてみようと思います。 「直接URLを入力して読み出そうとすると・・・」ですが、http://www.xxx.yyy.jp/cgi-bin/userdb.logと入力して読み出そうとすると下記のエラーがでます。これでもやはり巡回ソフトで簡単にダウンロードされちゃうんでしょうか? 関係ないかもしれませんが、Spurさんが書かれているような拡張子が datではなく、logとしています Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request. Please contact the server administrator, 「メールアドレス」 and inform them of the time the error occurred, and anything you might have done that may have caused the error. More information about this error may be available in the server error log. Apache/1.3.27 Ben-SSL/1.48 Server at 「URL」 Port 80