人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perl についての質問です。

ごくごく初歩的な質問です。

自分の作ったサイト(仮にAサイトとします。)からPOSTを使い、データを以下のような感じで受け取るとします。

$data = $in_data{'data'};

ここで、ある疑問が頭をよぎったのですが、自分の作ったAサイト以外からも、POSTでデータを送る事ができるのでしょうか?

属性のあたりが関係してくるのでしょうか?

どなたか、わかりやすく教えて頂けないでしょうか?

●質問者: zachouR
●カテゴリ:インターネット ウェブ制作
✍キーワード:Perl サイト データ 属性
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● b-wind
●50ポイント

Perl に限らずすべての CGI に他サイトからの POST 送信は出来ます。

HTML の

<form action="http://example.com/form.cgi">

等とするだけです。

http://q.hatena.ne.jp/1159938166

◎質問者からの返答

ありがとうございます、とゆーことはどこからでもアクセスが可能で、掲示板などを作った場合、遠くから書き込めてしまうわけですね、、、みなさんはどうなさっているのでしょうか、、、?

ありがとうございました。

b?WINDさん、いつもありがとうございます。お礼を送らせて頂きます!


2 ● noboru
●50ポイント

http://q.hatena.ne.jp/ (URLはダミーです)

特定のサイトからのみの POST しか受け付けないようにしたいということでしょうか? だったらその CGI の中で REMOTE_ADDR か REMOTE_HOST を見て判別するようにするとか、あるいはサーバの機能そのものを使って(ファイヤーウォールだとか tcp wrapper だとか)特定のホストからしか接続不可能にしてしまえば良いと思います。

◎質問者からの返答

さっそく調べました。

これをやってみると、なんだかよさげな感じがします。(^^;)

ありがとうございました。


3 ● ootatmt
●50ポイント

CGIでデータを送ってくるのはクライアント(ウェブページにアクセスしてきた人)です。

つまりどこからでもデータを送って掲示板等に書き込むことが出来ます。


最近は自動的に掲示板を巡回して宣伝等を書き込むボットが開発されているので、これを防ぐための対策をする必要があります。

例えば、英数文字だけの書き込みは拒否するとか、書き込み時にパスワードを要求するとか、禁止ワードを設けて宣伝を防ぐとかですね。

公開されているCGIプログラムを参考にするといいと思います。

http://swanbay-web.hp.infoseek.co.jp/index.html

◎質問者からの返答

URL、ありがとうございます。非常にたすかります!


4 ● TomCat
●100ポイント ベストアンサー

postにせよgetにせよ、Webページから送信されるデータというのは、フォームのあるページが置かれているサーバが送信しているのではなく、実は送信ボタンを押した利用者のブラウザが送信しているんですよね。

ですから、どこのサイトに設置したページでも、あるいはPCのローカルに置かれたHTMLファイルでも、ブラウザがフォームを読み込んでいれば、そのブラウザは <form action="・・・・"> のactionで指示した先に、データを飛ばすことが出来るわけです。

この仕組みを使って、他サイトに設置されたフォームからデータを受け取って動作しているのが、たとえばGoogleなどの検索窓です。どこのサイトに設置された検索窓からでもGoogleはデータを受け取って、検索結果を表示します。Googleの場合、データの受け渡しはgetですが、考え方はpostと同じです。

とゆーことはどこからでもアクセスが可能で、掲示板などを作った場合、遠くから書き込めてしまうわけですね、、、みなさんはどうなさっているのでしょうか、、、?

掲示板などの場合、掲示板に付属する以外の書き込みフォームからのデータを受け付けてしまうと、勝手に書き込みフォームを作られてイタズラ書き込みをされたり、javascriptなどを使って大量に書き込みを送り付けられたりする恐れがありますから、この場合はデータを受け取る側のCGIで、ブラウザが読み込んでいたページがどこかということを示す「HTTP_REFERER」という変数を参照します。いわゆるリファラというやつです。そして、掲示板のURL以外のリファラが検出されたら、外部からの書き込みと判断して、エラーページに遷移させて処理を中断するなどして対処します。

2chなどの場合、ブラウザのリファラを送信しない設定にしていると「ブラウザ変ですよん」などと表示されて書き込めませんが、これは外部からの書き込みを遮断するためにリファラを参照していることの証拠で、そのため、リファラが検出されないブラウザからの書き込みも拒否しているわけです。

具体的な方法については、たとえばperlで書かれた掲示板CGIとして高いシェアを持つKENTさんのYY-BOARD

http://www.kent-web.com/bbs/yybbs.html

では、次のようにして外部からの書き込みを遮断しています。

# 他サイトからのアクセス排除
if ($baseUrl) {
$ref = $ENV{'HTTP_REFERER'};
$ref =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$baseUrl =~ s/(\W)/\\$1/g;
if ($ref &amp;&amp; $ref !~ /$baseUrl/i) { &amp;error("不正なアクセスです"); }
}

$baseUrlが掲示板を設置するURL、$ENV{'HTTP_REFERER'}がデータを送信してきたブラウザのリファラです。これを照合して、外部からの書き込みかどうかを判断しています。

◎質問者からの返答

詳しい解説ありがとうございます。

ソースまでつけて頂いて、すいません。

解説もわかりやすく、非常に参考になりました。2chを例にして頂いて、なんだか親近感?がわきました。

また、なにかありましたら、よろしくお願いいたします。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ