![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
ネット上のフォームからの送信しか受け付けない
CGIにしようと思いました。どうしたらいいですか?
フォームがあるページのソースを見れば、
サブミットした時にCGIに送信されるデータが
分かるから、ローカルでHTMLソースを作成し、
そのサイトのCGIの管理人が予想しなかった
データを送信することができてしまうではないですか。
これを不可能にしたいんです。
具体例だと、CGIにはサイズ sz が big か mall の
どちらかしか送信されないようにしていても、
<form method=POST action=~.cgi
<input name=sz><input type=submit>
</form>
というソースで適当な値を送信させることができる
のを不可能にしたいんです。
CGIの方で big と small 以外は無効にする
というのではなく、そのURLからしか送信を
受け付けなくさせたいんです。
No.3ベストアンサー
- 回答日時:
どうも。
。。(すんません、見てませんでした。。。(まだこれ生きてるの?
>if($ENV{'HTTP_REFERER'})
>というのが書いてありました。
>REFERER が得られないことがあるのはどういう
>場合なんですか?
直接そのURLにぽちぽち打ち込んだりして行った場合などです。
>URL を pack() でデコードしてあったけど、どういう場合に
>pack() が必用なんですか?
URLにエンコードしてしまうような記号や漢字(ひらがな)などがあった場合です。
(元に戻す処理が必要です。s/%(..)/chr(hex($_))/ge; ~ などという記述でも良いです。
(まぁ、packが使われることが多いのですかね。Perl習慣・Perl文化でしょう)
>/^\Q$_\E/ は /$_/ にしてもだいじょうぶですか?
2重にだめです。
くぉーと処理をすることで、漢字などでもかなりセーフになります。
(ソースコードをEUCコードにしといて、くぉーと入れとけば完全にOKと思います)
あと先頭の「^」を抜かしたら、引数に該当URLなどを使用されてもチェックをとおってしまうことになります。
例えば。。。
http://www.goo.ne.jp/search.cgi?value=http://*** …など
あとは自分でやってくださいまし。
ありがとうございます。
URLにひらがながある場合もあるんですね。
見たことがないから、pack() は必用ないと思っていました。
/^\Q$_\E/ については、/~$_/ と書くつもりだったのに
~ を書き忘れていました。
でもだめたったんですね。
\Q\E は \ 省略のためだけと思っていたのに、漢字の
扱いでは、よく分からないけど安全になるものだと
覚えておきます。
No.2
- 回答日時:
以下のようなのを、その該当のCGIに書き加えれば良いと思います。
#!/usr/bin/perl ← 適当にかきかえてくだされ。。。
#送信可能なURLを以下にかいてゆく。
$url[0] = 'http://*****/index.html';
$url[1] = '';
# ほかにあるなら…
$ENV{'HTTP_REFERER'}=~ s/%(..)/pack("C",hex($1))/eg;
if($ENV{'HTTP_REFERER'}){for(@url){if($_&&$ENV{'HTTP_REFERER'}=~ /^\Q$_\E/){$flag=1;last;}}}
if($flag!=1){
#どこからともなく送信された場合、、、
print "Content-type:text/html\n\n";
print << "EOF";
<HTML>
<BODY>
<TABLE celpadding=0 cellspacing=0 border=0>
<TR><TD ALIGN="CENTER">
<FONT SIZE=7>
はにゃ~ん!!!<BR>
ヽ(;´Д`)ノ<BR>
≡<BR>
ノノ<BR>
</FONT>
</TD></TR>
</TABLE>
</BODY></HTML>
EOF
exit();
}
################################
この間には、今使っているCGIをコピー&ペースト
################################
以上でいけるかな?(いけんかったらすんません)
この回答への補足
ありがとうございます。
ソースを教えてもらえたのでとてもうれしいです。
if($ENV{'HTTP_REFERER'})
というのが書いてありました。
REFERER が得られないことがあるのはどういう
場合なんですか?
環境変数をチェックするサイトに行った時も、
$ENV{'HTTP_REFERER'} が得られず、空欄だったことが
あったような記憶があるんです。
URL を pack() でデコードしてあったけど、どういう場合に
pack() が必用なんですか?
/^\Q$_\E/ は /$_/ にしてもだいじょうぶですか?
送信可能なURLが1つの場合、下のようなソースを考えました。
改良した方がいいところがあったら教えてください。
#!/usr/bin/perl
if($ENV{'HTTP_REFERER'} ne 'http://aa.com/a.htm' | 'http://120.1.0.60/a.htm'){exit()}
print "Content-type:text/html\n\n";
print << "EOF";
<HTML> ...
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- ホームページ作成・プログラミング CGIが実行可能なHP領域又はレンタルサーバーでおすすめの所を教えてください 現在ホームページ領域の 1 2023/01/01 11:47
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- CGI (フリーの)ツリー掲示版CGI、昔は多用させてもらいましたが・・今セキュリティ上どうでしょう? 2 2023/06/25 07:18
- JavaScript Google reCAPTCHAについて 1 2023/02/22 14:37
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
お問い合わせフォームから送信...
-
ホームページビルダーのメール...
-
Firefox フォームデータ
-
フォームを再送信しますか?
-
VBA EasyCommでの送信
-
BASP21のSendMailとSendMailEx...
-
VB.NETからGmail経由でメールを...
-
メールアドレスが正しいかどう...
-
Googleフォームを回答したか確...
-
WriteFileで送信できたかの確認...
-
VB6で、Bsmtp.dllを使って、メ...
-
アンケート送信 ビルダー8
-
Postmailの使用でメール受信が...
-
フォームを作りたいと思ってい...
-
mail送信CGIの返信後のページの...
-
ACCESSから、メール送信を行い...
-
VBで添付ファイル付きのメール...
-
Accessでメール一括送信ソフ...
-
ビジネスメールの敬称
-
初歩的な事だと思います。 Sub...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
お問い合わせフォームから送信...
-
フォームを再送信しますか?
-
Safariで「本当にこのフォーム...
-
Googleフォームを回答したか確...
-
ACCESSから、メール送信を行い...
-
BASP21のSendMailとSendMailEx...
-
Accessでメール一括送信ソフ...
-
メールアドレスが正しいかどう...
-
チャットを作る
-
VB.NETからGmail経由でメールを...
-
ホームページビルダーのメール...
-
VB6で、Bsmtp.dllを使って、メ...
-
WriteFileで送信できたかの確認...
-
メールフォームで送信すると「...
-
VBA メール一斉送信で添付ファ...
-
VB.NET(2005)の"SerialPort" ...
-
CGIでメールのReturn-Pathに値...
-
メールフォームの受信先にg-m...
-
VBで添付ファイル付きのメール...
-
VBA EasyCommでの送信
おすすめ情報