プロが教える店舗&オフィスのセキュリティ対策術

質問なのですが、CGIを使いたいなと思い、幾つかのサイトを
見て勉強していたのですが、どうにも上手くいきません。
私はXサーバーを使用しています。XサーバーでCGIちゃんと
使えるよっていう方がいらっしゃれば一層助かります!!

サーバーに置いてある自分のCGIのファイルをクリックして
開くと背景が青緑?になってソースがそのまま表示されてしまいます。
ちなみに、CGIファイルは以下です。public_htmlの下のcgiというフォルダの下にtest1.cgiというファイル名で保存しています。

=======-===ここから=================
#!/usr/local/bin/perl

print "Content-type: text/html\n";
print "\n";
print "<html>\n";
print "<head>\n";
print "<title>テスト</title>\n";
print "</head>\n";
print "<body bgcolor=\"#ffcccc\">\n";
print "これはCGIのテストです。\n";
print "</body>\n";
print "</html>\n";
(文字コードはShift_JISです。)
===========ここまで===============
.htaccessのファイルも、CGIのファイルと同じ階層に入れて
います。以下がそのファイルです。public_htmlの下のcgiというフォルダの下に.htaccessというファイル名で保存しています。
==========ここから================
AddType application/x-httpd-cgi .cgi<CR><LF>
(最後の行は改行しています)
(文字コードはShift_JISです。)
==========ここまで================

どうすれば良いのでしょうか??ご教授お待ちしております。

A 回答 (10件)

> 丁寧な説明でしたのでこんな僕でもディレクトリのお話を掴めて


> きました!!ところで、cgiは特別index.htmlみたいに固定の名前
> って必要なのでしょうか??サーバーには特に何も書かれてなくて、
> cgi-binというディレクトリ以下でなくても作動すると書いてあるの
> ですが・・・・。すみません、質問ばかりで申し訳ありません(><)

CGIに関しては、一般的には拡張子(ファイル名のうちピリオド以下最後の3文字)が「cgi」となっていれば、Webサーバによってそう認識されるような設定になっています。
ただ、べつに他の名前に設定することは可能です(混乱を招くだけですけど・・・)。
拡張子以前のファイル名はこれも一般的には半角英数と一部の記号文字となります。
Apacheという名前のWebサーバソフトでは「Options ディレクティブ」という設定項目で「ExecCGI」というパラメータでもってCGIが使えるのかどうかを指定します。
不自由なレンタルサーバなどでは「cgi-bin」以外の場所にCGIを置くことを禁じていることもあります。
初期状態では使えなくとも「.htaccess」を置くことを許されていると、その置き場所以下にWebサーバのオプション機能を追加できますので、質問者様のように

AddType application/x-httpd-cgi .cgi
Options +ExecCGI

という内容の「.htaccess」を置けば、それ以下のディレクトリで「.cgi」という拡張子でCGIが使えるようになりますが、プロバイダの方で許可されているならこのファイルは必要ないでしょう。


> あとは先のお方の欄で書かせていただいたエラーとパーミッションが
> どうも分からないです。本当にすみません(><)

パーミッション(属性)の指定は、ユーザ権限とかも一緒に理解していないと訳がわからないと思います。
・オーナーは持ち主
・グループはユーザーがシステム上で所属するグループ(例えば開発プロジェクト別でグループの権限を持たせて同じグループに所属しているユーザにのみ操作権限を与えるとか・・・)
・その他は上記以外の権限も含めてすべてのひと

それぞれに、「読める権限」と「書き込む権限」そして「実行する権限」、を割り振ることができます。
例えば「700」としてしまうと、オーナーには読み書き実行が出来ますが、それ以外の人は出来ないことになります。
ここで、注意して欲しいのはオーナーというのを自分という人間を指すのではなく、サーバに接続している状態でのユーザを指します。
メールを受信したりFTPなどでファイルをやり取りするために接続するには、ユーザアカウントというIDとパスワードがあります。
そのIDで接続しているものの権限を指すのです。
Webの場合は通常IDとパスワードを求めたりしないので、匿名アクセスとなり、Webサーバによって指定されたユーザIDになりますので、それがオーナーであるとは限りません。
逆にオーナーと同じであるなら、オーナーとなって権限が強くなるため、改ざんなど悪いことのし放題です。

public_html・・・755
これはディレクトリファイルで誰もが読める状態でなければならないので755(ディレクトリの場合実行権限が必要)で正解

.htaccess・・・・700
これは設定用テキストファイルなので実行権限は不要でオーナーも誰かわからないので「644」の方が正解

cgi・・・・・・・711
これはディレクトリファイルですがオーナーがわからないので「755」の方がよい

test1.cgi・・・・700
これもオーナーがわからないので「755」の方がよい

この3桁の数字について蛇足ながら
左から「オーナー」「グループ」「その他」となります
数字の意味は2進数に例え、これも3桁とし、左から「読み」「書き」「実行」となります。
0 -> 000 なにもなし
1 -> 001 実行あり
2 -> 010 書き込みあり
4 -> 100 読み込みあり

4(読み) + 2(書き) + 1(実行) => 7
4(読み) + 2(書き)  => 6 (実行が不要な場合)
4(読み) + 1(実行)  => 5 (変更が出来なくても実行はしたい:CGIは実行が出来なくてはいけないけれども赤の他人に改ざんされては困りますよね)

という感じでしょうか。
ながながとすいませんでした。
    • good
    • 2

前の方の回答と同意見です


蛇足ながら少し説明をくわえますと

ホームページをWebサーバから公開するとき、ここにホームページ関連のファイルを置いてくださいよと決められたところが有ります。
Webは基本的に不特定多数の誰でもがアクセスできる仕組みなのでドメイン名だけでアクセスするところは「ここ」と決められた場所を作ってやらないと、個人的なファイルまでもがさらされてしまうことになります。
その一番最初のディレクトリを「ドキュメント・ルート」(DocumentRoot:書類の根?)と言います。
一般的に「htdocs」「html」「public_html」「Inetpub」などのディレクトリ名が付けられています。
もちろんWebサーバの設定で好きな名前にすることも出来ます。

今回の場合は、public_htmlがドキュメントルートとなるよう設定されているようですので、取得したドメイン名だけでアクセスするとそのディレクトリのインデックスファイル(これも設定で「index.html,index.htm,index.cgi,index.php,default.htm」などのファイルが指定されています)が表示されます。
public_htmlを一番上の階層として、それ以下のものがアドレスの対象となるため「public_html」はアドレスに含めなくてよいということです。

ひとつの例を示すと
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/」が「http://hoge.jp/」のドキュメントルートならば
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/cgi-bin/abc.cgi」にアクセスしたいなら
アドレスは「http://hoge.jp/cgi-bin/abc.cgi」となります。
もしも
実際のディスク上でのパス「/var/www/virtual/hoge.jp/」が「http://hoge.jp/」のドキュメントルートで
実際のディスク上でのパス「/var/www/virtual/hoge.jp/public_html/cgi-bin/abc.cgi」にアクセスしたいなら
アドレスは「http://hoge.jp/public_html/cgi-bin/abc.cgi」となります。

ドキュメントルートを指標としてアドレスを考慮するのが肝心です。

この回答への補足

何度もすみません。

.htaccessのファイルを消せば500エラーが表示されてしまいます。
一体どういうことなのでしょうか。

補足日時:2009/10/23 20:23
    • good
    • 1
この回答へのお礼

何度も本当にありがとうございます!!

丁寧な説明でしたのでこんな僕でもディレクトリのお話を掴めて
きました!!ところで、cgiは特別index.htmlみたいに固定の名前
って必要なのでしょうか??サーバーには特に何も書かれてなくて、
cgi-binというディレクトリ以下でなくても作動すると書いてあるの
ですが・・・・。すみません、質問ばかりで申し訳ありません(><)
あとは先のお方の欄で書かせていただいたエラーとパーミッションが
どうも分からないです。本当にすみません(><)

お礼日時:2009/10/23 19:50

>http://で自分のドメイン/public_html/cgi/test1.cgi


public_html は、いらないです。
http://で自分のドメイン/cgi/test1.cgi

この回答への補足

何度もすみません。

今.htaccessのパーミッションをcgiと同様に700としたら
今度はforbidenっていうエラーに変わりました。

各ファイル、フォルダのパーミッションは
cgi・・・・・・・711
test1.cgi・・・・700
.htaccess・・・・700
public_html・・・755
です。

補足日時:2009/10/23 19:39
    • good
    • 0
この回答へのお礼

ありがとうございます!!
ずっとpublic_htmlを入れていました(><)

すみません、本当に度々申し訳ないのですが、上記の方法で500エラーと表示されてしまいました。Xサーバー側の説明どおりtest1.cgiの設置ディレクトリであるcgiという名称のファイル、さらにtest1.cgiファイル自体のパーミッションを変えたのですが、直りません。
何か間違っている部分があるのでしょうか。

お礼日時:2009/10/23 19:36

たびたびお邪魔します。



> >どうやってサーバとつないでファイルを表示させてるのでしょうか?
> これはサーバーにログインして、保存してあるCGIのテキストファイルをWクリックして「開く」ボタンを押して呼び出しました。
どうやってサーバにログインしてるのと同じ質問でした。
つながっているのでログインしているのはわかっております。
どうやって(どんなソフトでどんな環境からどんな手段で)接続しているのでしょうか。
例えばSSH端末ソフトを使ってリモートでサーバに接続していますとか、ブラウザからベーシック認証とSSLでISPの提供するサーバの制御プログラムに接続していますとかという意味のことです。
状況によって、あなたが「なにを行って」「なにが悪いのか」をここからある程度推測が出来ます。

重要なのは、あなたがなにをどうして、「どうにも上手くいきません」という状況におちいっているのかを説明して欲しいわけです。

> FTPとはFFFTPのことでよろしいのでしょうか?それなら、
> バイナリモードにはなっていないと思います。
FFFTPはFTPを実装した、いちソフトの名称です。他にもたくさんあります。
この1文で、あなたはあなたの作ったCGIファイルをFTPを使ってサーバにアップしたと想像できます。
不足情報としてCGIのプログラムをなんと言うソフトで記述して保存しましたか? → テキストエディタ/メモ帳/Word?

> CGIファイルの実行属性?とはすみません、分かりません。
勉強をはじめた方にはよくわからなくて当然と思います。
ファイルには普通、「属性」というものが存在します。
Windowsでも普通にファイルを右クリックしてプロパティを見るとでてきたダイアログの下部に「属性」という項目があります。
読み取り専用で上書きを出来なくしたり、ファイルを見えなくしたりするための属性ですが、XサーバでレンタルしているようなUNIX系のシステムでも、ファイルの属性で「読み」「書き」「実行」という三つの属性が存在します。
ためしに先のFFFTPでサーバ側に送り込んだファイルを右クリックしてサブメニューを出し、「属性変更」を選んでみてください。
三種の属性がこれまた「オーナー」と「グループ」と「その他(だれでもみんな)」の三項目にそれぞれ割り当てられます。
CGIはWebから誰でもがアクセスできるようになっていますので、Webアクセスの権限で実行の属性を付けてやらなければなりません。
それは、ファイルアップロードしているオーナーと同じ権限であるとは限りませんので「その他」の「実行」の属性を付けてやるのが妥当でしょう。
「実行」属性が無いファイルはシステム上、それ単体では実行プログラムとは判断されないので、ただのコードが書かれたテキストデータという存在になってしまいます。

>
> 操作環境は、Xサーバーのサイトの引用をしますと、
> OSがLinux、メモリが4Gとなっております。
> CGIや.htaccessは利用可能とあるのですが、実際CGIが
> 機能しているものか、確認はまだ出来ていません。
URLとあなたがアップしているファイルのパスとの関連性についてはご理解されておりますでしょうか?
ブラウザからそのアドレスにアクセスしてみればわかります。
    • good
    • 0
この回答へのお礼

本当に何度もありがとうございます!!

>どうやって(どんなソフトでどんな環境からどんな手段で)接続しているのでしょうか。

えっと、ブラウザからベーシック認証で入っています。
ウチはビッグローブだったと思いますので、ISPを介しているかと思います。SSLはウィキりましたがどうなのかどうやって調べれば良いか分からずじまいです(><)全く説明になってないと思いますが、
分かったのはこれくらいです。すみません(><)
==============================

>FFFTPはFTPを実装した、いちソフトの名称です。他にもたくさんあります。
この1文で、あなたはあなたの作ったCGIファイルをFTPを使ってサーバにアップしたと想像できます。
不足情報としてCGIのプログラムをなんと言うソフトで記述して保存しましたか? → テキストエディタ/メモ帳/Word?

テキストドキュメントというもので作ったので恐らくデキストエディタだと思います。
==============================

>CGIはWebから誰でもがアクセスできるようになっていますので、Webアクセスの権限で実行の属性を付けてやらなければなりません。
それは、ファイルアップロードしているオーナーと同じ権限であるとは限りませんので「その他」の「実行」の属性を付けてやるのが妥当でしょう。
「実行」属性が無いファイルはシステム上、それ単体では実行プログラムとは判断されないので、ただのコードが書かれたテキストデータという存在になってしまいます。

実行属性は全てに装着されてました。htaccessも同様の属性になっていました。
===============================

>URLとあなたがアップしているファイルのパスとの関連性についてはご理解されておりますでしょうか?
ブラウザからそのアドレスにアクセスしてみればわかります。

私のCGIのテキストファイルはドメインの中のpubric_htmlのフォルダの中にあるcgiというフォルダの中にあるので、
http://自分のドメイン/public_html/cgi/test1.cgiということでしょうか??それならいつも404エラーというものが出てしまいます。

お礼日時:2009/10/22 22:53

>CGIが動作しているか確かめるためにはどうすればよいでしょうか


ブラウザのアドレス欄にURL(http:~test1.cgiまで)を入力して更新します。
    • good
    • 0
この回答へのお礼

http://で自分のドメイン/public_html/cgi/test1.cgiまで
入力して更新してみましたが404未検出というエラーが出てしまいます。(><)それともやり方間違っていますか??

お礼日時:2009/10/22 22:27

Xserverは初期設定で拡張子.cgiをCGIアプリケーションとして動作します。


また、一部の拡張子のAddTypeの上書きを禁止していますので、.cgiもそれに引っかかっているかもしれません。

.htaccessファイルを削除するか、AddTypeによる指定を削除してみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ありがとうございます!!

.htaccessのテキストフォルダを削除して、AddTypeによる指定を削除してみます!!あと、CGIが動作しているか確かめるためにはどうすればよいでしょうか??質問ばかりですみません(><)

お礼日時:2009/10/21 21:43

コメントに回答してから1番下のコメントを見て気が付きました。


Xサーバってレンタル屋の名前の方だったんですね(紛らわしい名前のISPだ)。
となるとわからないのがこのくだり
> サーバーに置いてある自分のCGIのファイルをクリックして
> 開くと背景が青緑?になってソースがそのまま表示されてしまいます。
どうやってサーバとつないでファイルを表示させてるのでしょうか?
ブラウザ?FTPクライアント?ISPから提供されている管理ツール?
FTPでファイルをアップするときにバイナリモードでアップしたりしていないですか?
CGIファイルの属性で実行属性は付けていますか?
質問に対する質問で申し訳ないのですが、あなたの操作環境に関する情報がまるで無いのでアドバイスのしようがないのです。
    • good
    • 0
この回答へのお礼

>どうやってサーバとつないでファイルを表示させてるのでしょうか?
これはサーバーにログインして、保存してあるCGIのテキストファイルをWクリックして「開く」ボタンを押して呼び出しました。

FTPとはFFFTPのことでよろしいのでしょうか?それなら、
バイナリモードにはなっていないと思います。

CGIファイルの実行属性?とはすみません、分かりません。

操作環境は、Xサーバーのサイトの引用をしますと、
OSがLinux、メモリが4Gとなっております。
CGIや.htaccessは利用可能とあるのですが、実際CGIが
機能しているものか、確認はまだ出来ていません。

お礼日時:2009/10/21 17:48

Xサーバ上で動作するブラウザがあるかと思います。


そちらの環境がさっぱりわからないので適切な指示は出来ませんが・・・。
Xサーバからランチャのようなものにブラウザが登録されていればそれを起動します。
それが無いなら右クリックなり何なりを画面上で操作してサブメニューなど出してからそこからコンソールを起動してコマンドでそのブラウザを起動する命令を入力します。
要するにスタートメニューがわかりにくいWindowsと操作はあまり変わりありません。
ブラウザはXクライアントのアプリなので管理者に聞いてください。
なにがあるのかは構築した者でなければわかりません。
ブラウザの使い方はこれ見てるわけですからわかりますよね。
    • good
    • 0

Xサーバを動作させている構成についての説明が何も無いので正確なアドバイスが出来るかどうかわからないのですが



> 私はXサーバーを使用しています。
昔、Windows上で動かして遊んでました。
> XサーバーでCGIちゃんと使えるよっていう方がいらっしゃれば一層助かります!!
まず、XサーバとCGIは馬と竹ぐらいなんの関係もありません。
テレビでTV放送を視聴できますがDVDはプレーヤーを介さないで直接見ることが出来ないのと同じことです。

XサーバはGUIの端末環境ソフトみたいなものですから、それ自体ブラウザでは有りません。
かたやCGIというのはWebサーバアプリケーションを通じてシステム上のプログラムを実行してその結果をWebクライアントに返す仕組みのことで、プログラムを指すわけではありません。
要はCGIとはWebサーバの一機能なのです(CGIをプログラムだと勘違いしている人があまりに多い・・・)。
現状、単純にCGIファイルをダブルクリックしてXEmacsとかXクライアント上のエディタが起動してるんじゃないでしょうか。
そんな状況だと「.htaccess」の存在意義もくそも無いんじゃないでしょうか。

Xサーバ上で動作確認したいならXクライアント上のブラウザを起動させて、そのブラウザからCGIを示すURL(アドレス)にアクセスすると、普通は(当然前提条件がありますが)動作するはずです。
どんなブラウザが有るのかはXクライアントのサーバ管理者に聞いてください。
    • good
    • 0
この回答へのお礼

ありがとうございます!!
Xサーバーどうのということは関係ないのですね。
エディタをWクリックして確認しようとしてましたが、
全くの無意味だったのですね(><)

HTMLファイルと同じようにURLを指定するということですか?
重ね重ねで申し訳ありませんがCGIにURLを指定するにはどうすればよいのでしょうか??

お礼日時:2009/10/20 16:26

「Xサーバー」って、X Window System の事ですか?



だとすると、重大な勘違いをされています。 ここで話題にしている CGI というのは Common Gateway Interface です。 Computer Generated Imagery とか コンピュータ・グラフィックス・なんとか ではありません。

... と今まで思ってましたが、それがどこに書かれてるか探しても見付かりませんね。 ははは。

しかし、ほとんどの質問が Common Gateway Interface のものであるのが事実です。

参考URL:http://ja.wikipedia.org/wiki/CGI
    • good
    • 0
この回答へのお礼

ありがとうございます!!
X Window Systemというのが分からないので、どうお答えさせて
頂いたら良いのか分かりませんが、とりあえずXサーバーという
レンタルサーバーを使用しているということです。

お礼日時:2009/10/20 16:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!