CGI: Common Gateway Interface part 11
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
03/06/14 22:26ID:F9qlqHNx※CGIは特定の言語に依存するものではありません。
Perlのコーディングに関する質問は、専用スレでお願いします:
[Perl 初心者コーナー Part24]
http://pc2.2ch.net/test/read.cgi/php/1054992610/
CGIとPerlの区別がわからない、という人はとりあえずこちらへ:
[WebProg 初心者の質問 Part3]
http://pc2.2ch.net/test/read.cgi/php/1045091733/
過去ログ・関連スレッドは >>2-5 あたりに
0681nobodyさん
04/02/09 00:50ID:???fork して入出力 (STDIN/OUT/ERR) を閉じれ。
完了確認はメール送るなりなんなりすれ。
http://www.google.co.jp/search?q=CGI+%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%A2%E3%82%A6%E3%83%88
>>680
Perl の場合は NFS 越しの flock は意味を成さないのと、
flock を実装していない OS に対応する為に、排他処理を
自作ルーチンでやる事がある。これらに当てはまらない
環境で使う事が分かっているなら flock が無難。
…という話は散々既出で嫌がられるので、以後はこの辺に。
http://pc2.2ch.net/test/read.cgi/php/1024795138/
0682nobodyさん
04/02/09 00:54ID:???flock は CGIとは直接の関係もないのではないかと(ry
0684nobodyさん
04/02/09 12:15ID:???mod_perl のことは難しいので、普通のCGIのケースに限って話をすると、
apache の場合のポイントは二つある。
一点目、apache が CGI を実行するときは、
クライアントとの TCP 接続について結構無頓着で、
CGI からデータが送られてくるまでは感知せず、
データを受け取って、つまりクライアントにデータを送信する段になって、
初めて TCP 接続をチェックして、
ここでようやく「切れてるじゃん」ということに気づく。
気づくと、CGI プロセスを kill しにかかる。
それじゃあ処理が完了するまでデータ送らなきゃ良いじゃん、
という話になるわけだが、まあやっぱりそういうわけにもかず、
二点目として、apache は、一定時間 CGI から出力がないと、
タイムアウトとみなし、CGI プロセスを kill しにかかる。
普通はこっちに引っかかるだろう。
上記は普通の CGI についての話であって、
mod_perl でコンテンツハンドラを書く場合はまた話が異なる。
Apache::Connection クラスには aborted という素敵なメソッドが用意されているぐらいで
いろいろ楽しいことができそうに思うのだが、
詳しいことは mod_perl スレに行って詳しい人に聞いてくれ。
0685nobodyさん
04/02/10 19:09ID:???エロ動画に直リンできるCGIを組んだんだけど
これを公開したら転送量がものすごいことになることに気づいた。
リクエストそのままで指定したURLに飛ばしたりはできない…よね。
やっぱり各自DLして使ってもらうしかない?
0686nobodyさん
04/02/10 19:58ID:???0687685
04/02/10 22:04ID:???0690685
04/02/11 14:53ID:???できないってことだよね。そうします。ありがとう。
>>689
できるならuser-agent, refererを偽装したまま
redirectする方法を教えてください。
0691nobodyさん
04/02/11 15:17ID:???CGI proxy なんてやる意味はあまりないぞ
重いだけ
0693685
04/02/12 09:35ID:???ふつーにローカルで動かすスクリプトにしました。
>>692
無理だと思ってたけど誰も答えてくれないし
689を見てできるのかなと思ってしまいました。
0695nobodyさん
04/02/12 16:41ID:???(エロい人の思考パターン)
エロ動画に直リン -> httpリクエストを弄らなきゃ!
-> >>690でやっぱり偽装か -> 無理
(ノーマルパターン)
各自DL -> 意味あるのか分からんが(;´Д`)リダイレクトで可能
0696nobodyさん
04/02/15 07:40ID:YoBoJyolテキストメールとhtmlメールの両方を1通にまとめて送ってます)、
htmlメール部分の文字コードは・・・
●規約としては、どのコードにするのが正しいのでしょうか?
また、
●現実問題として、どのコードににするのが「無難」なんでしょうか?
ご存じのかた、教えていただければ幸いです。
0697nobodyさん
04/02/15 07:55ID:zLVCaZamしたディレクトリにHTMLファイルを置いてもブラウザでその
HTMLを閲覧できません。(permission denied error)
どーしても cgi-bin ディレクトリにHTMLファイルを置きたいのです・・・。
宜しくお願い致します。
<Directory "/usr/local/apache/htdocs/cgi-bin">
SetHandler perl-script
AddHandler cgi-script .cgi .pl
PerlHandler ModPerl::Registry
Options ExecCGI
Allow from all
PerlSendHeader On
</Directory>
0698nobodyさん
04/02/15 12:25ID:bW2T2U/Mメールフォームで画像も添付できるようにしたいと思っています。
今はココ(ttp://www.annie.ne.jp/~cgipal/doc/palskin.htm)の
palskin mail ver.5というのを使っています。
できればこれに書き足してできれば最高なのですが…
こういう事は可能でしょうか?
0699nobodyさん
04/02/15 13:30ID:???【 スクリプト改造工房 PART 7 】
http://pc2.2ch.net/test/read.cgi/php/1063780103/
ちなみにその文面のまま依頼すると叩かれるので注意。
1をちゃんと読むこと。
0701nobodyさん
04/02/26 20:49ID:???http://fuga.com/ に Location でリダイレクトしました。
でもアドレスバーのURLは http://hoge.com/ のまま。
こういうもんなのでしょうか?
リダイレクト後にリロードすると、hoge.com で送信した内容が二重で送信されてしまいます。
これもこういうもんなのでしょうか?
0702701
04/02/26 21:06ID:???だと、アドレスバーはリダイレクト前から変化せず
print qq(Location: http://hoge.com/\n\n);
だと、アドレスバーが http://hoge.com/ になってくれますね。
相対パスだと変化しなくて、
httpからのURLだと変化するようです。。。
とりあえず確認したことをご報告します
0703nobodyさん
04/02/26 21:12ID:vjE+BrRn0706nobodyさん
04/02/26 21:57ID:???0707nobodyさん
04/02/26 23:29ID:???0709nobodyさん
04/02/27 01:42ID:???つまり http://からはじめれと
0711nobodyさん
04/02/27 02:44ID:???http://cgi-spec.golux.com/draft-coar-cgi-v11-03-clean.html#7.2.1.2
hoge.comは中の人に迷惑だからやめれ。
0713nobodyさん
04/03/02 19:04ID:AJEsvSvh投稿に文字実体参照を使いたいのですが、&をサニタイズからはずすと、どういうマズイことがあるのでしょうか。
文字実体参照と解釈できるものだけ再置換してもいいんですが、特に問題がないようなら外してしまおうかと。
あと、<>についても、どちらか一方だけ文字実体参照に置き換えておけば大丈夫というのは誤りですか?
0716nobodyさん
04/03/02 21:48ID:???>&をサニタイズからはずすと、どういうマズイことがあるのでしょうか。
>あと、<>についても、どちらか一方だけ文字実体参照に置き換えておけば大丈夫というのは誤りですか?
具体的実害は思いつかないが、少なくともHTMLとして文法違反になるのは確か。
予期せぬ表示上の不具合を発生させる可能性は否定できない。
そもそもなんでそんなにサニタイズを端折りたいの?
ちなみに俺は、HTML4.01の仕様に存在する実態参照だけは許して、
それ以外の&は&に置換するルーチンを書いた。
ここに貼り付けようと思ったが長すぎて拒否された。
0717716
04/03/02 21:52ID:???>それ以外の&は&に置換するルーチンを書いた。
>ここに貼り付けようと思ったが長すぎて拒否された。
区切って書いてみる
sub sanitizeamp
{
my ($str) = @_;
# 数値参照は OK (ただし末尾の ; が欠けている場合は補う)
if ($str =~ s/^?(\d+|x[0-9A-Fa-f]+);?/?$1;/) { return $str; }
# HTML4 に実在する文字参照は OK (ただし末尾の ; が欠けている場合は補う)
(続く)
0718nobodyさん
04/03/02 21:55ID:???0719nobodyさん
04/03/02 21:57ID:???|agrave|aacute|acirc|atilde|auml|aring|aelig|ccedil|egrave|eacute|ecirc|euml|igrave|iacute|icirc|iuml|eth|ntilde|ograve|oacute|ocirc|otilde|ouml|divide|oslash|ugrave|uacute|ucirc|uuml|yacute|thorn|yuml|fnof
(途中途中に入っている改行は削除すること)
0720716
04/03/02 21:59ID:???0721nobodyさん
04/03/02 22:01ID:???それでいて
> 思わないなぁ。そんな上っ面にはとらわれない主義だから。
> もっと本質を見ようね。
とか言っているんだから救いようがない。
具体的に色々問題があるわけだが、馬鹿には教えても無駄のようだから省略。
一見便利そうで利用者・閲覧者全員に迷惑を与える危険性の高いスクリプト
でも作って自己満足していれ。
0722713
04/03/02 22:08ID:???サニタイズを端折りたいわけではないです。
具体的にどういう不具合が出るのかを知りたかったので。
実体参照だけ再置換するルーチンを組むのは面倒ではないのですが、&を素通しにしてOKなら処理が速いかな、と。
HTML4.01に準拠するとして、#PCDATAとして扱われるところには<>&"は直接書いてはいけない、という理解でいいですか?
>>721
713です。715は私ではないので。
>一見便利そうで利用者・閲覧者全員に迷惑を与える危険性の高いスクリプト
を作りたくないので、質問しています。よろしければ教えてください。
0723716
04/03/02 22:26ID:???途中まで書いて中断するのも気持ち悪いからうp
ttp://www.geocities.co.jp/AnimeComic/5498/misc/sanitizeamp.txt
0724nobodyさん
04/03/02 22:35ID:???ありがと。サラッとみた感じで、数値の桁数を5ケタ以下にしといたほうがよさそうな。
まあ、あれですか。
<brockquote>また、著者は、「&」の代わりに「&」(ASCII十進38)を用い、文字参照の冒頭――文字実体参照の開始区切り子――と誤解されるのを避けるべきである。</blockquote>
ということですね。
参考になりました。
0725716
04/03/03 01:28ID:???サニタイズを端折った場合の問題を1つ思い出したので書いておく。
" のサニタイズを端折ったら
入力された文字列を value に取った input 要素の表示に異常が出たことがあった。
<input type="text" value="giko"monar"> となるべきところを
<input type="text" value="giko"monar"> になったってことね。
<> のサニタイズについても、< だけやって > を端折ったら
なんか問題が起きたような気がしたがちと今は思い出せん。
0726723
04/03/03 01:32ID:???>サラッとみた感じで、数値の桁数を5ケタ以下にしといたほうがよさそうな。
なるほど。
数値実態参照の数値の範囲は16ビットなんだっけ?
?〜?
?x0〜?xFFFF
てこと?
0727726
04/03/03 01:57ID:???&#0〜&#65535
&#x0〜&#xFFFF
てこと?
0728nobodyさん
04/03/03 12:03ID:???今ではU+FFFFより上にも文字もある予感
0729nobodyさん
04/03/09 12:04ID:TnCgMCudML登録CGIで掲示板の投稿の配信を受けるかどうか、選択し、
掲示板投稿時に投稿をその設定されたアドレスへメール配信しています。
で、MLアカウントへのメールが来たら、同時に掲示板への新規投稿として
掲示板に放り込みたいのですが、
どんな方法が考えられますか?
アウトラインだけでいいのでどなたか御教授下さいませ。
0730nobodyさん
04/03/09 17:04ID:???規制として、何行以上書き込まないと書き込まれないような
スプリクト記述ってありませんよね?
0731nobodyさん
04/03/09 17:07ID:???そういう意味じゃないのかな…
0732nobodyさん
04/03/09 17:08ID:???あるでしょ。てか
アドレス入れなきゃ書き込ませない、なんて事はざらなんで、
ある一定の長さの本文じゃなきゃ書き込ませない、なんて
別にそうすればいいだけでは?
0735nobodyさん
04/03/09 18:45ID:???> スプリクト記述ってありませんよね?
ありません。自分で書くしかありません。
できない場合は、掲示板の投稿の改行を数え、だめなやつは管理者権限で削除して下さい。
0736nobodyさん
04/03/10 04:52ID:???0737nobodyさん
04/03/10 12:37ID:ZLD/dvfRhttp://foo.example.com/cgi-bin/tester
へ接続しにいこうとしてうまくいきません。
以前もこのような症状がおきて、その時教わったのが、vi -b で.cgiファイルを開いて、行の最後に^M か ^B がついていたら、それを、viの画面で何かのコマンド(%s/…)で変換したら問題無く動いたのですが、そのコマンドがどのようなコマンドだったか忘れてしまいました。
実際今はの.cgiファイルを、vi -b で開くと、行の最後には、^Mがついております。
どのようにしたら良いでしょうか。
0738nobodyさん
04/03/10 13:01ID:???だれか返事してやれよw
メールアカウントの.forward なりに プログラムを埋め込む
そのプログラムは、直接ログファイルに書き込むなり
その掲示板CGIを呼ぶなりして投稿と同じ処理をCGIにさせるなりする。
0739nobodyさん
04/03/10 13:15ID:???> >>729
> だれか返事してやれよw
>
> メールアカウントの.forward なりに プログラムを埋め込む
> そのプログラムは、直接ログファイルに書き込むなり
> その掲示板CGIを呼ぶなりして投稿と同じ処理をCGIにさせるなりする。
ありがとうございます。
/home/ACCOUNT/www/ 以下でCGI動かしてます。
mailのログは
/var/spool/mail/ACCOUNT ファイルにある事は確認しました
telnetから上記mailのログは読めましたし、
/home/ACCOUNT 以下に持って来れましたが
CGIからMail::MboxParser.pm使って中身見ようとしましたが、
当然ながらパーミッションの問題で持って来れませんでした。
その.forward使ってメール着信時に予め/home/ACCOUNT に
ファイルのコピーを持って来ればいいのでしょうが、
肝心の.forwardをどこに置けばいいやらよくわかりません、
宜しければお教えいただくか、ポインタ教えて下さい。
0741nobodyさん
04/03/10 15:06ID:???あー 掲示板CGIでログを解析しないほうがいい。
.forward の中で呼ばれるプログラムは
メールの内容を標準入力に渡されるのでそれを加工して掲示板のログに入れてあげればよいかと。
0742739
04/03/10 15:32ID:tqgEM6Ax実は
/home/ACCOUNT/maillists/
にML設定ファイルがあり、それ宛へのメールをCGIで横取りしたいのです。
.forward を書いてみましたが
[email protected]宛てのメールは転送されましたが、
/home/ACCOUNT/maillists/test
で設定した
test@@ACCOUNT.com宛てのメールは転送されてきませんでした
まあ、当然といえば当然ですが。
やっぱり
/var/spool/mail/ACCOUNT をcpしてくるようなスクリプトを書いて
CGIからそれを叩く、って事なんでしょうか
0743nobodyさん
04/03/10 17:13ID:bqGiGoNX0745nobodyさん
04/03/10 18:53ID:???> >>742
> test のアカウントにも .forward おいたら?
>
> spoolの下からコピーなんて邪道は許せんw
はい、そうですね、僕もそうしたくないです。
/home/ACCOUNT/maillists/
これがMLのアドレスリスト記載したファイルの置き場で、
testにアドレスをいくつか改行で入れたものをこの中に入れといてやると
[email protected]で入れたアドレスにメールが配信されます。
/home/ACCOUNT/maillists/
には複数のMLアカウント用のファイルが置いてあります。
/home/ACCOUNT/maillists/.forward
として置きましたが無視されました。
どこに置けばいいんでしょうか…
0746nobodyさん
04/03/10 19:34ID:???0747nobodyさん
04/03/10 20:11ID:???> /etc/aliases
調べてみました。
telnetで除きに行きましたが Permission denied
で、見せてもらえませんでした。
現状 [email protected]宛てのメールは
~/.forward で捕まえられそうなので、
全てのMLへ[email protected]を参加させ、
そいつを~/.forward で捕まえてto: MLアドレスなら処理、
見たいな事でやってみようと思います。。
0748nobodyさん
04/03/10 20:28ID:???0749nobodyさん
04/03/11 00:53ID:XsdX+AtW自宅サーバ開設の実験として、Kent Webさまよりyybbsをダウンロードして、
文献(Mac OSX Unix的活用講座)の指示通りperlのある場所の指定をし、
アクセス権を正しく設定しましたが、"Internal Server Error"となってしまい
ます。職場/自宅の両方の環境で試しましたが、ダメです。Kent Webさまの
FAQコーナーの事項はすべてチェックしたつもりです。いったいなにがダメ
なのか教えてください!Askaは問題なくうごくのですが・・・
サーバ、クライアントともMac OS X 10.3.2です。
0751nobodyさん
04/03/11 02:09ID:???しかし >>749 に書いてある情報だけで
「いったいなにがダメなのか教えてください!」と聞かれても
「あんたという人間自身がダメ」としか答えようがないよ
とりあえずエラーログでも見てみたらどうだ
「エラーログって何?」という状態だったら、自分でCGIを使うのは諦めたほうがいい
0752747
04/03/11 11:56ID:???> "| naniwoyattenndai"
どうもヒントありがとうございます。
open Mail, "mail |" or die;
open Back, ">mail.back" or die;
while(<Mail>){print Back;}
close Mail;
close Back;
こんな風にやってみました。
とりあえず1個持ってきてくれましたが、
& Saved 1 message in mbox
Held 673 messages in /var/spool/mail/hoge
なんて事で、溜まりまくってます。
これmailコマンドになんか足してやれば、
未読メールは全部読む、なんて事にならないんでしょうか?
調べましたがわかりませんでした。
でも読んでmboxにセーブされるなら手元にprint
する必要ないですね。
なんかスレ違いになってきてますが、
すんませんがポインタでもお願いします。
0754747
04/03/12 16:10ID:???> >>748 は「.forward の中に | を書け」というアドバイスだと思ったんだが…
はい、気が付きました。
パイプで処理をプログラムに渡す、って事ですね。
いろいろやってみます。
0755nobodyさん
04/03/21 19:08ID:???ボタン名がクエリに入ってたら処理を分岐してたオレはいったい…
どうしよ。
0756nobodyさん
04/03/21 21:44ID:???0757nobodyさん
04/03/21 21:56ID:???name無しの時に分岐のどの処理をさせるか、無効操作として再度フォーム表示するかどうか、
それさえ決めればよさそうな.....
0758755
04/03/22 11:38ID:???hiddenでフラグ持たせとくかー
なんかすんごいアナログだけど
ボタン一個の時はこれしかないよね。
>>757
そそ。nameで分岐。
name無しは基本的にまたフォームに戻すんだけど、
リターンで送信されたときにもちゃんと飛ばせないトナーと思ったり。
1フォームにsubmitボタンが2個あるときってどうしてますか?
0759nobodyさん
04/03/22 14:56ID:???0761nobodyさん
04/03/22 16:20ID:???0762nobodyさん
04/03/22 16:43ID:???現実的じゃないかも。
たしかにラジオボタンだと正確に取得できるが、
実際のフォームとかでそういうの見ないな。(むしろ使いにくい)
0763nobodyさん
04/03/22 17:04ID:???0765asdf
04/03/24 11:20ID:CibVmuL+#!/usr/bin/perl
# アクセスカウンタ
print "Content-type: text/html; charset=Shift_JIS\n\n";
# カウントファイルから読み込み
open(IN, "counter.txt");
$count = <IN>;
close(IN);
# カウント増加
$count++;
# カウントファイルに書き込み
open(OUT, "> counter.txt");
print OUT $count;
close(OUT);
print <<EOL;
<html>
<body>
<p>あなたは $count 人目のお客様です</p>
</body>
</html>
EOL
という死ぬほど簡単なCGIなのに。ファイル名はcounter.cgi
あと、0とだけ書かれたテキストファイルcounter.textをおく。
0766asdf
04/03/24 11:21ID:CibVmuL+ここのCGIです。
print <<EOL;
<html>
<body>
<p>あなたは $count 人目のお客様です</p>
</body>
</html>
EOL
を
print"
<html>
<body>
あなたは $count 人目のお客様です
</body>
</html>
"
としたらうごいたけど・・
何が原因なの?
ほかにもいっぱい動かなくて、CGI開発行き詰ってるYO!
0767asdf
04/03/24 11:24ID:CibVmuL+↑動かないカウンター
http://diary.asdf.jp/a.cgi
↑動くカウンター
違いは>>766のとおり
0768nobodyさん
04/03/24 12:36ID:???> 何が原因なの?
> ほかにもいっぱい動かなくて、CGI開発行き詰ってるYO!
エラーログ見るとか、
チェック用CGIで探るとか、
use CGI::Carp qw(fatalsToBrowser);
するとか、ああとかこうとか、すれよ。
ばかかお前。
勝手に行き詰れよ、あほ。
メーワクだから開発なんかするな、
ちゅうか、カイハツ?それ。
設置じゃねえか、それ。
0770nobodyさん
04/03/24 17:22ID:???しかし普通は「作る」といったら自分でソースを書いて制作することを指す。
回答側はその前提でソースやコーディングをアドバイスすると、分からんとほざく。
いいかげんにしろと。
0771nobodyさん
04/03/24 19:38ID:???0772nobodyさん
04/03/24 21:07ID:???たまーにフォームから送信したはずのクエリがCGIで取得できなかったりするんだけど、
この症状について誰かご存知の方いますか?
wwwはapache, ブラウザはIE6です。
0773nobodyさん
04/03/29 23:04ID:???0774772
04/04/04 12:06ID:???「Wininet により空白のヘッダーのみの POST 要求が再送される」
ttp://support.microsoft.com/default.aspx?kbid=831167
激しくこれな気がしました。
SSL+POST時におけるIE6のバグっぽいですね。
IE6だからどうりで今まで正常に動いてたわけだ。
GETにするしかないのかなぁ…
0775Perl+XHTMLユーザ
04/04/06 18:50ID:BdnN1EXaprint <<"_EOD_";
Content-type: text/html
<html lang="ja">
<head>
(略)
_EOD_
などとすると、<html lang="ja">の前に改行が入ってしまいます。
また、かといって
print <<"_EOD_";
Content-type: text/html
<html lang="ja">
<head>
(略)
_EOD_
などとするわけにもいかず・・
これは仕様上やむを得ない事なのでしょうか?
0777nobodyさん
04/04/07 11:39ID:???0778nobodyさん
04/04/10 11:10ID:brO2qLuhパスワードをcookieに記録すると丸見え。でもユーザーが毎回パスワードを入力
しないようにしたい。
ささやかな抵抗として以下のロジックを実装してみた。
1.cookieには自分を自分自身でcryptして頭2文字を除いたものを記録
2.記事には1をランダムな種でcryptしたものを記録
3.投稿時にパスワードをcookieから取得したのならその文字列をそのまま
記事に記録されたパスワードとチェック。
4.投稿時にパスワードがcookieから取得されたものでなければ、1と同様の
処理をしてから、記事に記録されたパスワードとチェック。
なにか問題があるだろうか。
もしくはもっといい方法を知っていれば教えてくれ。
0780nobodyさん
04/04/10 17:18ID:???XSSを危惧してのことならXSSをさせないこと自体が重要。
せいぜい数文字程度の強度しかないユーザーパスワードを種にするより、
管理者が20文字くらいのcryptを勝手に発行してCookieで食わせたほうがいいのでは?
ユーザーがCookieを削除してしまえばそれまでだけどね。
そもそも記事に記録するcryptは見せる必要がない。
不安なら管理者が設定した秘密の種で再cryptして記録する。
■ このスレッドは過去ログ倉庫に格納されています