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

これまでうまく動いていたcgiを新たに設置したのですが
下記のようなエラーがでます。

Script Error
The script did not produce proper HTTP headers. Please see the error log to see the detail of the errors. Depending on the server configuration, you can also run thisscript under CGIWrap debugging. Usually, either rename or linkthe script temporarily to a file which ends with .cgidextension, or add a AddHandler cgi-script-debug .cgiline to your .htaccess file.

使用しているサーバーはxreaです。

パーミッションは
設置cgi[755]
にしております。

色々、過去ログをみたりぐぐってみたりしたのですが、
考えられる手はうってみたのですが、
他に考えられる原因は何かありますでしょうか?

A 回答 (9件)

捕捉にあったURLからダウンロードしてみましたが、バージョンが違って書き方も変わっているようです。



> 2009-02-09
> サニタイジング処理を追加
とあるので、新しいものを使ったらどうですか
    • good
    • 0

動作していたスクリプトが環境を変えると動作しなくなる原因は大きく2点考えられます。


1.設置操作ミス
 ・FTPソフトのダウンロード・アップロード操作に起因する自動改行や文字コードの変化
 ・パーミッション(CGIだけでなくCGI周りを含む)
 対応策:
  アップロードしたファイルに変化がないことを確認する
  パーミッションの設定をひととおり確認する
2.実行環境が変わった。
 ・CGI実行環境のサーバ側の仕様変更:システム(OSなど含む)、クライアントの実行権限、ファイルシステムなどなど
 ・対象言語のバージョン変更
 対応策:
  「Hello World!」など単純なCGIで動作確認してみる。
  FormMailソフト付属のチェックツール「check.cgi」で確認してみる。
  CGIサーバアナライザ(futomi)などのツールで実行環境(権限・環境変数・モジュール)を把握し、アノニモス権限などを確認する。
  べたなやり方ですが、くだんのCGIにトラップを仕掛けて実行してみてエラー内容を確認する
   perlに「-c」「-w」「-d」などのオプションをつけて実行してみる
   USEやREQUIREの直後に「print "Content-type: text/plain\n\n";」などを入れてエラーメッセージを画面に直接表示させてみる
    →大体これで判明することは少ないので、要所要所に「print "here OK Line No.".__LINE__."\n";」などと入れて実行してみる
  SSHが使えるようなのでHTTPのエラーログを探ってみる(TeraTermなど端末ソフトの経験がないならWinSCPなどを使って徘徊)

障害は「問題の切り分け」が基本です。
ピンポイントで探るのは場数を踏んできた経験則の多い方が自身で作業する場合のやり方です。
マクロな視点から切り分けながら問題点を探ってください。
仮に無駄な作業があっても自分のスキルアップにはなるかと思います。
大変ですが、がんばって下さい。
    • good
    • 0

> パーミッションは


> 設置cgi[755]
> にしております。

http://www.xrea.com/?action=spec には

> ■推奨パーミッション
> ・実行ファイル:0700(rwx------) 以上
> CGIは必ず正しいパーミッションで設置してください。

というちょっと意味不明な記述がありますが、承知の上の 755 でしょうか?

# 経験則や一般論より、正規の説明書を優先しましょう。
    • good
    • 0

>No.5


> やはり同じエラーメッセージがでます・・・

Content-Typeヘッダを出して動かないなら、単に文法エラーがあるだけでしょう。

Windowsをお使いなら、PCにActivePerlなどをインストールして、
スタートメニューの「ファイル名を指定して実行」に"command"と入力してコマンドプロンプトを出し、

C:\>perl -c C:\path\send.cgi

と入力してそのメッセージに従ってデバッグするしかないと思います。

参考URL:http://www.synck.com/contents/download/support_b …
    • good
    • 0

・アスキーモードでアップロードされましたか?



・2行目に

print "Content-Type: text/html\n\n";

と書いてみるとどうなりますか?

この回答への補足

回答ありがとうございます!
補足遅くなってしまい、申し訳ございません。

やはり同じエラーメッセージがでます・・・
send.cgiの中身の冒頭はこうなっています。

*****************************************************************

#!/usr/local/bin/perl←ここが1行目です。
print "Content-Type: text/html\n\n"; ←先ほどのん
## 2007-04-28 Ver.5.2

require 'jcode.pl';
#use Jcode;

#server check (SPAM CHECK)
$this_server = $ENV{'SERVER_NAME'};

#CGIソース内で設定する場合は下記に書きます。
#※HTMLで設定している場合無視されます。

$sendmail = '/usr/local/bin/perl';

@mailto = ('xx@xxxxxxxx.com');

*****************************************************************

ディレクトリの構成は

public_html/xxxxx/.htaccess
.htpassword
index.html
L/form/index.html
send.cgi
jcode.pl
mailform.js
L/postcode/←これは郵便番号のデータです。

わかりずらい文面かもわかりませんが、こんな構成にしてます。
念のため、.htaccess等が原因との過去ログでありましたので
それも検証するため、一度削除してみたのですが、結果は同じでした・・・

どうかお力をお貸し下さい・・・・

補足日時:2009/04/14 10:54
    • good
    • 0

・アップロードするときにテキストモード(アスキーモード)でアップロードしていますか?


・「\」の記号が、バックスラッシュではなくUTF-8の\マークになっていませんか?
ASCIIコードではバックスラッシュは0x00A0、円マークは0x005Cです。


1行目から2行目に以下を書いて実行してみて下さい。

#!/usr/local/bin/perl
use CGI:Carp qw/fatalsToBrowser/;

違うエラーメッセージなどが出れば、それが原因です。

この回答への補足

回答ありがとうございます。

回答でいただいたように
send.cgiの1行目から2行目にかけて
#!/usr/bin/perl
↑これから
  ↓これに
#!/usr/local/bin/perl
use CGI:Carp qw/fatalsToBrowser/;

かえてみましたが、結果はエラーメッセージは同じでした・・・

ためしに、
#!/usr/local/bin/perl
use CGI:Carp qw/fatalsToBrowser/;
から「use CGI:Carp qw/fatalsToBrowser/;」をはぶき

#!/usr/local/bin/perl
で試してみたのですが、エラーメッセージは同じでした・・・

どうしたらいいでしょうか・・・

補足日時:2009/04/13 14:11
    • good
    • 0

> 「/usr/local/bin/perl」に変換したのですがやはりエラーは表示されるようです。



あ、ここは、/usr/local/bin/perl か /usr/bin/perl のいずれかが正解と決めつけるのは危険かも知れません。

XREA がPerlCGIを公式に許可しているなら、どこかにどう書くべきか説明があるはずです。 探してください。

これは、とてもとても大事です。 正しいと確証が持てない状況で他の事を調べても、無駄手間になりかねません。

他にも書く事はあるのですが、まずは 1行目の正解は何かをはっきりさせてくださいね。

この回答への補足

さっそくお返事ありがとうございます!

http://www.xrea.com/?action=spec

ここでみてみたのですが、

perl : /usr/bin/perl、/usr/local/bin/perl

上記のように記載されており、両方とも正解のようです・・・

補足日時:2009/04/13 09:23
    • good
    • 0

エラーメッセージの


> The script did not produce proper HTTP headers.
がまずは重要です。

HTTP headers はこの場合レスポンスヘッダで、大抵は Content-Type: を含みます。 CGI は、これを最初に STDOUT に出力せねばなりません。

エラーメッセージは、それが無いと言っているのです。

よくある原因は...

1 1行目の誤り
#! /usr/bin/perl か #! /usr/local/bin/perl かはサーバーにより正解が違います。

2 コンパイルエラー
インストール済のモジュールが違う場合もコンパイルエラーになります。 Perl標準のモジュールも自分でインストールしたモジュールもともに容疑者です。

3 クラッシュ
CGIがレスポンスヘッダの出力前にクラッシュしても、やはりこうなります。


XREA で可能かどうかは知りませんが、エラーログを見る事ができるなら重大なヒントが含まれてる可能性が高いです。

この回答への補足

>1 1行目の誤り
>#! /usr/bin/perl か #! /usr/local/bin/perl かはサーバーにより正解
>が違います。

ここに関しては、もともと「 /usr/bin/perl」とあったものを
「/usr/local/bin/perl」に変換したのですがやはりエラーは表示されるようです。


2 コンパイルエラー
インストール済のモジュールが違う場合もコンパイルエラーになります。 Perl標準のモジュールも自分でインストールしたモジュールもともに容疑者です。
3 クラッシュ
CGIがレスポンスヘッダの出力前にクラッシュしても、やはりこうなります。

2,3に関しては、正直ちょっとわかりません。(難読なため・・・)

2に関しては、perlはもともとあったものを設置しております。
jcode.plとなっております。
特になにもいじっていません。

3に関しては、クラッシュしている場合はどうすればよいでしょうか?
サーバー側に問題がある可能性もXREAの場合、否めない部分もありますので可能性としては、それも疑っています。

ただ、XREAではエラーログがみれないため、原因となるヒントがよくわかりません。

何か解決法があれば、教えてください。

補足日時:2009/04/12 17:46
    • good
    • 0

>これまでうまく動いていたcgiを新たに設置した.


具体的にどんなCGIなのでしょうか?
例)KENTWebさんのノーマル掲示板
http://www.kent-web.com/
など
使用しているサーバーはxreaです。
うまく動いている方も、同じサーバですか?
>考えられる手はうってみた
具体的になにをされたのでしょうか?
>他に考えられる原因
上記の情報がなれば、他も何もありません。

この回答への補足

すいません、情報を追加いたします。

使用しているサーバは同じXREAです。
以前、使用していたウェブサイトをリニューアルするにあたり
問い合わせフォームだけ同じものを使用するためコピペして
使いました。

使っているのは
http://www.synck.com/contents/download/cgi-perl/ …
を使っています。

今のところ、もともとサーバーにULした際に、パーミッションを変更することを忘れておりましたので
設置cgiを755に、設置ディレクトリを755に変更しました。

他には、現在サイトを制作中ですのでhtaccessとhtpasswordを設置しています。
設置場所は、public_html/直下で、index.html(トップページ)と同じディレクトリです。

その下に/form/としてのディレクトリを設置しており、この/form/ディレクトリ内にcgiを設置しています。

この、htaccess等が問題があるのかなと思い、削除してみたのですが
やはりこのscript errorが表示されます・・・

思いつく限り、補足してみましたが、また情報が足りない場合、
どういう情報を提示させていただけばよいか教えてください・・・

補足日時:2009/04/12 15:00
    • good
    • 0

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