No.4ベストアンサー
- 回答日時:
#3の補足欄に対する回答です。
PHPは「<?php」とかかれる前にテキストを書いても良いように
あらかじめヘッダが出力されています。
ですので「Content-type: text/html\n」は無くても大丈夫です。
もしなんらかのヘッダを出力したい場合は
文字を表示する前の段階で
header("Content-type: text/html");
のように書いてください。
この回答への補足
ありがとうございます
何度も答えてもらい恐縮しています
test.cgi:
#!/usr/bin/php
<?php
header("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";
?>
としてみたところ
Warning: Cannot modify header information - headers already sent by (output started at /var/www/cgi-bin/test.cgi:3) in /var/www/cgi-bin/test.cgi on line 4
これはCGIのテストです。
となりました
"Content-type: text/html\n"以外のヘッダ送らないといけない状況はないのでしょうか?
その場合は自動生成ヘッダを無効にしなければならないと思いますがどうすればいいのでしょうか?
No.3
- 回答日時:
#2の補足欄に対する回答です。
もちろんPerlは元々CGIで動作させるものですので、
エラーはでません。
ですが、PHPは初めからCGIで動作させるよう設定されていないので、
設定をしなければ動作しません。
php.iniの
「;cgi.force_redirect = 1」とかかれている部分を
「cgi.force_redirect = 0」と変更してください
この回答への補足
ありがとうございます
動きました
Content-type: text/html これはCGIのテストです。
が表示されました
ヘッダ(Content-type: text/html )
がついてきたのですが何が悪いのでしょうか?
PHPの場合ヘッダはいらないということなのでしょうか?
test.cgi:
#!/usr/bin/php
<?php
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";
?>
No.2
- 回答日時:
#1の補足欄に対する回答ですが、
かっこ内の意味はCGI実行に反対するのではなく、
以前はCGIスクリプトはすべて「cgi-bin」フォルダの中でのみ
実行可能というサーバが(かなり)多かったのですが、
フォルダ名が普遍的であるがゆえに
スクリプトが置いてあるであろう位置が容易に推測できてしまい、
直接指定で実行されてしまいやすい事が理由なのではないかと思います。
また、自動的に特定のスクリプトを攻撃するスクリプトが
出回ってしまった場合、
本来の攻撃対象であるサーバ以外のサーバも副作用的に攻撃されてしまう可能性もあります。
余談ですが、「cgi-bin」と言う位置に固定されてしまう事により、
カテゴリ分けがしづらいなど、デザイン上も非常に不利益を蒙ります。
(某大手レンタルサーバなどで未だ現役です)
この回答への補足
ありがとうございます
サーバはFedoraCoreですが
test.cgi:
#!/usr/bin/php
<?php
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";
?>
を/var/www/cgi-bin/におき
http://192.168.0.101/cgi-bin/test.cgi
をブラウザから呼ぶと
Security Alert! The PHP CGI cannot be accessed directly.
This PHP CGI binary was compiled with force-cgi-redirect enabled. This means that a page will only be served up if the REDIRECT_STATUS CGI variable is set, e.g. via an Apache Action directive.
というメッセージがでました
どうすればいいのでしょうか?
なお
test2.cgi:
#!/usr/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";
を/var/www/cgi-bin/におき
http://192.168.0.101/cgi-bin/test2.cgi
をブラウザから呼ぶと正常に動作しました
No.1
- 回答日時:
通常のモジュールとしてではなく、
CGIモードで、ということでしょうか。
(という言い方も変ですが)
別に邪道ではありませんし、
セキュリティ面には特に変わりないです。
実行速度が落ちるというだけで。
この回答への補足
ありがとうございます
PHPのマニュアルに以下のようなことが書いてありますが
これはどういうことでしょうか?
PHP を CGI バイナリとして使用するのは、PHP を モジュールとして(Apache のような)サーバーソフトウエアに組み込み たくない何らかの理由がある場合や安全な chroot と setuid 環境をス クリプトに提供する他の CGI ラッパーと組み合わせて PHP を使用する 場合の設定オプションです。セットアップ時には、通常、PHP 実行バイ ナリを Web サーバーの cgi-bin ディレクトリにインストールします。
「CERT 勧告 CA-96.11は、いかなるイ ンタプリタを cgi-bin に置くことにも反対しています。」
PHP バイナリをスタンドアロンのインタプリタとして使用することが できる場合でも、PHP は、セットアップにより生じる可能性がある 次のような攻撃を防ぐように設計されています。
「」の中が気になります
どうしてCERTは反対しているのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI 古ーくからフリーのtree.cgi掲示板を利用させてもらって来ましたが、最新でなにか復活できないか? 2 2023/04/07 10:43
- CGI htmlからcgiを自動的に起動させたい 1 2023/02/21 19:39
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- Amazon Amazon アカウントはどうすると変更できる? 5 2022/04/10 07:09
- ライフスタイル・ヘルスケア WIN10 スタートアップとバックグラウンドアプリについて教えてください 3 2022/05/15 16:49
- CGI CGIで出力するhtmlの<!DOCTYPE html>等のタグは要りますか? 2 2023/02/05 21:26
- Amazon アマゾンからのメール 4 2022/07/13 10:53
- その他(ブログ) ランキングサイトのポイントが発生しない理由 1 2023/01/21 11:40
- セキュリティホール・脆弱性 win更新ファイルについて 2 2023/03/13 11:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLでのdeadlockをPHPで検出...
-
xserver のCronでphpを実行する...
-
【PHP】命令は記述順に処理...
-
Prompt入力値をphp変数として取...
-
PHP&Mysql&Cronを使って自動...
-
PHPで、C#のプログラムを実行す...
-
system関数で一部のプログラム...
-
ファイルの実行権限について
-
PHP(Windows)でコマンド実行
-
透過PNGが透過されない!!
-
CFileDialogの最初のディレクト...
-
【file_exists】ファイルが存在...
-
フォントの色を変えるには?
-
VB6にてメールを送信する方法
-
C# Excelファイルへの画像挿入。
-
フォームで戻った際に入力済み...
-
.htaccessにphp_valueが使用できな
-
別ファイルの変数を呼び出した...
-
3つ以上の論理積は利用可能なの...
-
onedrive にexcelファイルをア...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
mysql複数レコードをまとめて削...
-
PHPからバッチファイルの実行
-
php実行中に実行中のphpファイ...
-
Prompt入力値をphp変数として取...
-
Switch文における、returnとbre...
-
phpからエクセルのマクロを実行...
-
ヒアドキュメントの中で演算子...
-
copy() で属性保存
-
httpdのプロセスが自動で消えな...
-
別サーバのプログラムを起動
-
シェルスクリプトをPHPで動かそ...
-
【PHP】命令は記述順に処理...
-
MySQLでのdeadlockをPHPで検出...
-
Linux:PHPでTELNETによるSMTP...
-
サーバーモジュールとCGIプロセ...
-
ブラウザからexecコマンドを実...
-
phpスクリプトのみで定期実行
-
phpのshell_exec関数の動作に関...
-
PHPからlhaコマンドを使いたい
-
htmlでsubmitで指定したAction...
おすすめ情報