CGIだけどなんか質問ある Pert 5.01
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
02/03/03 12:49ID:673UxTI50482nobodyさん
02/03/21 15:27ID:SSRvR1vKKENT×
KENT氏○
0483nobodyさん
02/03/21 15:35ID:???(( ( ) ) )
( ( ( ) ) )
’ (( ) ) )
( (( | | ) )
‘ (( | | ) ) ‘
’ | | 春ですね。
○イザベラ! | | ’ ξ○ξ スミス・・・
−+− | | V ,
| | | |
/\ / \ /\
0484hanamogera
02/03/21 15:37ID:c8Atj9bt何ででしょうか?
sub decode {
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, "sjis", "", "z");
$value =~ s/&/&\;/g;
$value =~ s/</\<\;/g;
$value =~ s/>/\>\;/g;
$value =~ s/\"/\"\;/g;
$value =~ s/<>/\<\;\>\;/g;
$value =~ s/<!--(.|\n)*-->//g;
$FORM{$name} = $value;
}
$name = $FORM{'name'};
$title = $FORM{'title'};
$comment = $FORM{'comment'};
$comment = ~ s/\r\n|\r|\n/$br/g;
$mode = $FORM{'mode'};
}
0485nobodyさん
02/03/21 15:38ID:???大崎さんのやりかたを参考にして,きっちり判定するとか。
http://www.din.or.jp/~ohzaki/perl.htm#JP_Code
0487nobodyさん
02/03/21 21:53ID:zzUVZQ93アクセスカウンタが20いくごとに起動、とかの方法はわかるんですが、
一定の時間ごとに起動させるというのは何を使えば良いでしょうか?
0489nobodyおっさん
02/03/21 22:11ID:???あなたが一定時間ごとにアクセスしてこのときに実行させるか
あなたならどっち?
0490nobodyさん
02/03/21 22:12ID:???0491nobodyさん
02/03/21 23:01ID:rmv2GYdPある一定の時間を指定して、CGIの呼び出しがあったときにチェックして、
その時間が過ぎていたら処理を行い、次に処理する時間もそのときに指定する
チェックルーチンを入れれば、cron使えなくても擬似的に出来るよ。
0492487です
02/03/21 23:39ID:zzUVZQ93ありがとうございます。cronですね、使えるかなぁ・・・
491さんの方法もよさげだけどやり方わかんないす。
0493nobodyさん
02/03/22 00:01ID:???これは止めておいた方がいいぞ。
while(1){
# ここにコード
sleep(60*60);
}
0494nobodyさん
02/03/22 00:14ID:p0uEX1fS年月日時分秒をシリアルな数値で獲得できるだろ?
処理後にあれを一日だったら1日分足して置けばいいんだよ。
いろいろやり方ありそうだよな。ほかにも。
どっちにしてもそんなに難しい処理じゃないと思うよ。
一日単位だったら、単純に日にちがカワったら処理をして、新しい日にちに
書き換えたらいいんだし。
0495487です
02/03/22 01:24ID:esA90bh2アクセスカウントUP時に何回かに1度の割合で実行させる、という方法以外に
実行させる方法あるのですかね?
>493の方法は常にpgを動かしておきsleepが切れたときに本実行させる
ものだと思いますが止めたほうが良いとのこと。
>494のようにどっかに日時を持っておくとして、それを起動させる方法はどんなのですか?
0496nobodyさん
02/03/22 01:46ID:???0499厨房
02/03/22 15:53ID:3P7KS9SJhttp://zurubon.strange-x.com/uploader/
を色々見てみたんですけど、CG�Tが初めてなので
全く分かりません。
何かヒントまたは代わりに作って下さる方いらっしゃらないでしょうか?
0500500
02/03/22 16:06ID:???CGIが初めての奴に対しての"ヒント"ってなんになると思う?
数行のスクリプトならまだしらまだしも
アップローダーを作れか?あほ。
0501nobodyさん
02/03/22 16:08ID:???まだしも○
スマソ
0502499
02/03/22 16:20ID:3P7KS9SJ0503nobodyさん
02/03/22 16:35ID:???print <<"__FORM__";
Content-type: text/html
<FORM ACTION="$ENV{SCRIPT_NAME}" ENCTYPE="multipart/form-data" METHOD=POST>
<INPUT TYPE="FILE" NAME="file">
</FORM>
__FORM__
print <STDIN>;
ブラウザが送るデータを観察してデコードする方法でも考えればぁ?(゚Д゚)
0504nobodyさん
02/03/22 17:01ID:KCkKfXvIメールフォームでメールを送ろうとしたのですが送信ボタンを押して待てど暮らせど
出るはずの確認画面が出ません。
これは送信されてないものと考えていいのでしょうか。
重複送信になるのが怖くて再送信することができずにいます。
0505nobodyさん
02/03/22 17:02ID:qjFFNAMI0506504
02/03/22 17:50ID:???っていうか再送信して大丈夫か否かってのが訊きたいんですけどダメですか?
直接相手に問い合わせしようにも他の連絡手段が無いんですよね
(イベントの特設ページみたいなサイトだし)
0507nobodyさん
02/03/22 18:53ID:fazmqrAM( ´_ゝ`)フーン
0508nobodyさん
02/03/22 21:43ID:tj2D5lJW0510nobodyさん
02/03/23 00:43ID:???息抜きにコンビニのラーメンでもいかがでしょうか
http://wakaz.lolipop.jp/index.html
0511nobodyさん
02/03/23 02:39ID:???0512nobodyさん
02/03/24 02:20ID:Gb9vu2Wcかつ管理者モードが複数ページに渡る場合、
最初のページで一度認証済ませれば次のページへは認証なしで入れる、
というようにするにはどうすればいいですか?
最初の認証でパスワードをpost送信させると2ページ目では取得できないし、
どこかにフラグを立てて置くと、ログアウトさせないとフラグが残ってしまうし、
HTTP_REFEREを調べるとしても、どうしても不正にアクセスできてしまいます。
やり方が悪いのでしょうが、うまい方法が思いつきません。
普通はどういう方法で認証しますか?
0514512
02/03/24 02:29ID:Gb9vu2Wcなんだか、見慣れない手法で、ちょっと混乱。考え中。
とりあえず、ありがとうございます。
0516512
02/03/24 02:49ID:Gb9vu2Wcすみません。もうちょこっとヒントいただけませんか?
>>515
反則です(笑)。今のところ動作環境がBASIC認証とやらを使えるかどうか
わからないのです。ちなみにBasic認証を使うとどの時点まで
アクセスの権限が持続するんでしょう?後学のために..。
0518512
02/03/24 03:15ID:Gb9vu2Wcなるほど!そいつは便利ですね。いづれ使うことになると思います。
ありがとうございます。
>>513
これ、いくら考えても意味がわからないんですが、
誰か解説してもらえませんか?
0519nobodyさん
02/03/24 03:19ID:???0520nobodyさん
02/03/24 03:21ID:KxmQdHuE0521nobodyさん
02/03/24 03:26ID:???・CookieにセッションIDでセッション利用
・Cookieのみ
・HIDDENで持ち歩く
一応安全だと思う順
他にも方法ある?
0522512
02/03/24 03:29ID:Gb9vu2Wcてっきりフォームから変数名を送って巧妙に2ページ目にパスワードを
引き継ぐ方法があるのかと思ってました。
ソース見たらパスワードばれちゃいますけど、普通そんなもんですかね。
basic認証とやらが使えなければ、この方法でやります。
ありがとうございました。
0524nobodyさん
02/03/24 14:09ID:???入力した本人しか見れないんだからいいんじゃないの?
0527よくわからんけど
02/03/24 20:47ID:???0528512
02/03/24 20:47ID:???セキュリティスレ発見したので、そっち読んでます。
0529512
02/03/24 20:48ID:???0530521
02/03/24 21:03ID:???使わないとは思うけどGETしたら見えちゃうし、
万が一その状態でリンクで飛んだ先にアクセス解析ついていたら
パスワードがログに取られてしまう。
0531nobodyさん
02/03/24 21:10ID:???偽装について説明きぼん。
0532512
02/03/24 21:11ID:???GETしたら〜というのはどういう状況ですか?
こちとらPOSTのフォーム書き出してるのにGETしてしまう状況とは?
0533512
02/03/24 21:13ID:???なんらかの手段で不正にパスを知った人が自分でフォーム書いて
ログインできるってことじゃないですかね。それがクッキーより容易ということ?
0534nobodyさん
02/03/24 21:14ID:???>なんらかの手段で不正にパスを知った人が
その時点でセキュリティ終わってる。
0535512
02/03/24 21:19ID:???自己レス、>>530で使わないとは思うけど〜ってありましたね。失礼。
>>534
セキュリティは終わってるけど、521が言ってるのはそういう意味じゃないですかね。
まあ、終わってることは終わってる。
0536nobodyさん
02/03/24 21:25ID:???パスワードがわかった時点で改造フォームを作る必要がないと気付いてくれよ。
堂々と正門からパスワード入力して入っていけばいいんだから。
0537512
02/03/24 21:27ID:???失礼!頭悪くてすみません!
0538nobodyさん
02/03/24 22:31ID:???防ぐ方法ありますよね。たぶん初歩的なことですけど、書いてあるページ教えてちょ。
0539nobodyさん
02/03/24 22:46ID:Gb9vu2Wcこれかなあ。
0543nobodyさん
02/03/24 23:09ID:???print 'http://'.$ENV{'HTTP_HOST'}.$ENV{'SCRIPT_NAME'}."\n\n";
これですか?
0544nobodyさん
02/03/24 23:13ID:???http://pc.2ch.net/test/read.cgi/php/988890976/175-
http://pc.2ch.net/test/read.cgi/php/988890976/175-
0545nobodyさん
02/03/24 23:28ID:???#
sub wri_ {
if ($FORM{'name'} eq "") { &er_("名前が未入力!"); }
if ($FORM{'comment'} eq "") { &er_("コメントが未入力!"); }
if (length($delkey) > 8) { &er_("削除キー は8文字以内!"); }
if ($locks == 1) { &lock_; }
open(LOG,"$log") || &er_("Can't open $log");
@lines = <LOG>;
close(LOG);
if($bup){&backup_;}
($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]);
if ($name eq $kname && $comment eq $kcom) { &er_("二重投稿は禁止です!"); }
この { &er_("二重投稿は禁止です!"); }ってとこにlocationとやらを入れるんですか?
0546nobodyさん
02/03/24 23:37ID:???違う。
1回目の書き込みが終わった時点で飛ばすの。
0548nobodyさん
02/03/25 00:06ID:???<input type=reset value="リセット"$fm></td></tr></table></form><hr>
_KEY_
}
$total=@NEW;
$page_=int(($total-1)/$a_max);
if ($FORM{'page'} eq '') { $page = 0; }
else { $page = $FORM{'page'}; }
$end_data = @NEW - 1;
$page_end = $page + ($a_max - 1);
if ($page_end >= $end_data) { $page_end = $end_data; }
foreach ($page .. $page_end) {
($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$NEW[$_]);
if($email ne ""){ $name="<a href=\"mailto:$email\">$name</a>"; }
if($d_may eq ""){ $d_may="No Title"; }
if($link_i == 1){
if ($url ne "") {
$url="<a href=\"http://$url\" target=\"_top\"><img src=\"$i_dir/$l_img\" border=0 width=\"$h_wid\" height=\"$h_hei\"></a>";
}
} elsif ($link_i == 0){
if($url ne ""){$url="<a href=\"http://$url\" target=\"_top\">http://$url</a>"; }
}
print <<"_HTML_";
この辺ですかね?
0549nobodyさん
02/03/25 00:12ID:???あのさー、中学生?
言葉使いとかなんかおかしくない?
なんでそんなスキルで
この辺ですかね?
とかなの?
あっ気が付いた!だから馬鹿なんだ!
0550nobodyさん
02/03/25 00:13ID:oozWjwB1いったん処理を終了させ、自動的にそのcgiを再実行。
そのためにlocationで自分自身に飛ばす。使い方は検索すれば出てくる。
0553nobodyさん
02/03/25 00:21ID:???,,、‐''"~ ̄  ̄``''‐、、
/ \
/ ヽ
/ ヽ
/ / ~~` '' ‐- 、、 ,,__ __ ,,..、、 -‐ '' "~~\ ヽ
| / __  ̄ __ ヽ |
.| { ´ ‐- ....__ __... -‐ ` } .|
.| 〉,,・^'' - .,, ~ i ~ __,,.- ^`・、.〈 |
./ ̄| /,/~ヽ、 `'' ‐--‐ ,.| 、‐-‐'' "~ _ノ~\,ヽ | ̄ヽ
| (` | / ヽ,,_____`‐-、_、..,,___ノ八ヽ___,,.._-‐_'"´___,, ノ ヽ .|'´) |
| }.| ./' \二二・二../ ヽ / ヽ、二・二二/ 'ヽ | { |
.| //| .| / | |. \ | |ヽヽ|
.| .| | .| / | |. \ | | | .|
|ヽ.| | / .| |. ヽ .| .|./ .|
| .| | / | | ヽ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ .| | / .| | ヽ | | / | >ここでしょうか?
.ヽ.| | / '二〈___〉二` ヽ | |./ < 馬鹿な548がいるのは。
| | `-;-′ | | |
iヽ|. ,,... -‐"`‐"`'‐- 、、 |/i \_________
| ヽ /...---‐‐‐‐‐----.ヽ / .|
| ヽ. ,, -‐ ''"~ ~"'' ‐- 、 / |
.| ヽ ! ./ .|
,,| ヽ. | ./ |、
|\. ヽ / /.|
.|. \. ヽ、____ ___/ / .|
' `  ̄ ̄ ´ '
0554nobodyさん
02/03/25 00:23ID:???口の利き方が悪いな。
0555nobodyさん
02/03/25 00:27ID:???利口になる気のない馬鹿は一生馬鹿だよ。
馬鹿が利口になるためには利口になろうと努力しないといけない。
0557nobodyさん
02/03/25 00:42ID:oozWjwB1そのクッキーファイルを削除してもう一度実行したら書き込めなくなってしまいました。
その間、ちょこっとCGI自体書き換えたんですが、
print "Set-Cookie: ore_site_id=ore; expires=Thu, 1-Jan-2030 00:00:00 GMT;\n";
print "Content-type: text/html\n\n";
こんな感じで書き出してます。perlです。
何が原因だかさっぱりわからないので、ひょっとしたらスレ違い、
板違いになるかも知れないんですが、
何か原因思い当たる方いらっしゃいませんでしょうか。
宜しくお願いします。
0558557
02/03/25 01:12ID:???0559hanamogera
02/03/25 16:29ID:WG0pi2qc↑携帯用の掲示板スクリプト作ったんですが、
ログがある程度たまるとWAP2.0端末からアクセスできなくなるんです・・・
『接続できません。しばらくたってからリトライしてください。』って出るんです。
でも、Apacheのログにはエラーはありません。
WAP2.0端末はXHTMLを読むということだったので、XHTMLで記述してます。
Another HTML-link gatewayでチェックしてみたら、95点でした。
いったい何がおかしいんでしょうか?C5001Tで動作確認してます。
0560nobodyさん
02/03/25 16:47ID:???0561nobodyさん
02/03/25 16:49ID:PUm89G3ucgi-binの中にproc.cgiというファイルを置いて、それをcrontabで動かしたいんですが
ファイル書き込みだけが出来ないみたいです。cgiの中身は
open(SDATA, "<sdata.dat")|| die "File 'sdata' Open Error.";
@a_sdata = <SDATA>;
close(SDATA);
この間で@a_sdataの中身を編集してます。
open(WDATA, ">kdata.dat")|| die "File 'kdata' Open Error.";
print WDATA @a_sdata;
close(WDATA);
print "@a_sdata\n";
こんな感じでファイルを読み込んで、編集して、別ファイルに書き込むというcgiなのですが、
ブラウザにアドレスを打って直接アクセスで起動するとファイルの書き込みは正常に終わり、
編集したデータが表示されます。
ですがcrontabから起動すると、編集したデータはメールになって送られてくるんですが、
ファイルへの書き込みがなされません。データファイルのパーミションは600でしたが
666に変更しても試してみました。cgiのパーミションは700と755で試してみました。
いずれもcrontabからではメールは届くので動いてはいるらしいんですがデータファイルが
更新されないんです。更新日時も変わってないです。
crontabからの起動では何か対策が必要なんでしょうかね?
ちなみにcrontabの記述は*/30 * * * * perl /cgi-bin/proc.cgiです
0562質問野郎
02/03/25 16:49ID:???のですが、フォームCGIに不適切な動きが起きていて、大元のプロバイというか
サーバー屋に問い合わせてもちょっとわからないっていう返事なのですが……。
CMでもやっている有名なところです。
その部分が
<input type="hidden" name="ML_ADDRESS" value="送信先メールアドレス">
<input type="hidden name="Subject" value="Subject(タイトル)">
<input type="hidden name="ML_FROM" value="送り元メールアドレス">
ていうことなのですが、そのサーバー屋さんに問い合わせたところ、
ML_FROMの行のvalueを送り先メールアドレスと同じにしてください。といわれたらしい
んですが(私は間接的に聞いただけ。)
あと、その仕事をうけている企業はそのフォームが自分とこにメールがきたら
それを返信しようとすると、送り先が自分とこになるっていっているのですが
もちろん送り先と送り元のメールアドレスを同じにしたらそういうことが
起きると思うのです。ML_FROMは不特定多数であって
ここは変数か何かになって、CGI側で送り元をGetか何かで取得するもんだと
思っているのですがいかがですか?そのCGIは基本的にさわらせてもらえません。というか
そのサーバー独自のCGIです。よろしくお願いします。
0564nobodyさん
02/03/25 17:31ID:???ttp://tohoho.wakusei.ne.jp/
とりあえずここかな?
>561
メール送信処理の前に書き込み処理を入れて試してみたら?
書き込みの時点で失敗しているならそこでdieされるよな。
そこでメールを送るなら、メールの中にエラーメッセージを入れて確認するとか。
>562
もう少しわかりやすく。
0565562です。
02/03/25 17:57ID:???ある企業からホームページの制作をうけているものです。
その中にフォームメールを使うページがあってメール自体は
動くのですが、メールをうけている企業さんの話によると
その受けたメールを返信しようとすると宛先には
自分のメールアドレスになるんです。
Aさんが[email protected]ていうアドレスでフォームCGIを介して
その企業さんの[email protected]に送ったら
その企業さんはAさんに返信するときに
宛先が[email protected]になるところが、[email protected]になる
ていうことなのです。
この企業がアップしているサーバーの担当者に問い合わせてもわからないとのことです。
(このCGIはサーバーで提供されているCGIです。)
フォームメールCGIのCGIに変数を渡しているかと思われる部分は
渡されたマニュアルとサーバーの担当者の説明によると
<input type="hidden" name="ML_ADDRESS" value="送信先メールアドレス">
<input type="hidden name="Subject" value="Subject(タイトル)">
<input type="hidden name="ML_FROM" value="送り元メールアドレス"> で
ML_ADDRESSの行のvalueとML_FROMの行のvalueを同じにしてください。と
言われているのですが、それでいくと宛先がその企業さんとこになると思います。
ML_ADDRESSの行の送信先メールアドレスはこれでいくとその企業さんのメールアドレスで
検証してもあってるんですが、ML_FROMのvalueの部分はたぶん変数か何かになると思われるのですがいかがでしょう?
とこのような説明でよろしいでしょうか?
間接的に聞いてるというか間にひとつ会社がはさまってて直接ん、その企業さんの話を聞いている
わけでもなくサーバーにアクセスしてもそのCGIは当然見えないわけですが……。
もしかしたらこの説明でもやはりおわかりにならないかもしれません。
よろしくお願いします。
0567562-565です。
02/03/25 18:11ID:fNWLtbGzたぶんML-FROMの部分の行はエラーが起こった時に使うのかなぁ?と思われるのですが…
書き方はあってます。
0568561
02/03/25 18:23ID:PUm89G3uなので最後の行のprint "@a_sdata\n";の内容がそのまま送信されます。
とくにsendmailとかはcgiの中には記述してないんです。
その@a_sdataの内容はちゃんとしてるにもかかわらずファイルの書き込みが
全然されないのはcrontabからの実行の場合だけなんです。
ファイル書き込みじにdieされてるとしたらprintされないと思うんですが
出力結果のメールは届くんです。
CGI直接起動ではうまくいくのにcrontabからだとうまくいかない、というのが
理解できないんです。何か対策方法ないでしょうかね?
0570nobodyさん
02/03/25 19:13ID:???頭を柔らかくしろ。
俺は問題の修正方法を教えてるんじゃなくて、その原因究明の方法をいってるの。
ファイルのオープンが失敗したって、@a_sdataの内容が消えるわけじゃないでしょ?
だったらそれがそのままメールで送られてくる事に不思議はない。
そんな事よりも、メールの内容に$!を入れて何が起こってるかをまず把握しろ、と。
対策方法を考えるにはまず原因究明。
デバッグの基本。
対策方法の結果聞きたいだけなら、ソース公開しな。
0571nobodyさん
02/03/25 19:30ID:???PHPとかいうやつに、彼女取られてたね。
Cくんは、相変わらずさわやかで、もててるけどね。
0572561
02/03/25 19:36ID:PUm89G3uなるほど原因がわからないのに対策とってもその場しのぎでしかないすものね。
いろいろと試してみます。
0574nobodyさん
02/03/25 19:47ID:???0575nobodyさん
02/03/25 19:47ID:???CGIとPerlの違いわかってる?
0576nobodyさん
02/03/25 21:01ID:???彼にとってPHPはCGIじゃないんだよきっと・・・
0580nobodyさん
02/03/25 23:25ID:???200 OK とか,403 Forbidden とかまでも自前で出力するですな。
そこで問題なんスけど,お客様曰く「403 を出力するなら
apache のアクセスログに残るようにして欲しい」とのこと。
ンな事は可能なんでしょうか?
0582nobodyさん
02/03/25 23:40ID:???ここのYYBBS2iってありますよね。
説明が「KENT さん作の各種掲示板と連携のとれる i-mode 用掲示板」って書いてあるんですけど、
連携が取れるってどういう意味でなんでしょうか?ログの共有って意味なんでしょうか?
FAQも掲示板もないんで、サッパリ分かりません。どなたか知ってる方お願いします。
■ このスレッドは過去ログ倉庫に格納されています