Perl でCGIを組んでいます。


HTML上のフォームで、
method="post"
を指定していた場合、無理矢理GETでCGIにデータを送った場合はどうなるでしょうか?

http://www.test.cgi/test.cgi?kind=1111

といった感じで、本来ならばフォームから送信されるべきのkindが、アドレスに直接うちこまれてtest.cgiが受け取るのです。

どちらも、通常通り動くのでしょうか?

質問がつたなくてすいません。

回答の条件
  • URL必須
  • 1人20回まで
  • 登録:2007/11/05 10:16:01
  • 終了:2007/11/12 10:20:03

回答(3件)

id:GoldenDawn No.1

GoldenDawn回答回数426ベストアンサー獲得回数812007/11/05 10:57:28

ポイント27pt

GET と POST ではデータの受けとり方が違うので、POST を前提として作られたスクリプトではデータが取り出せません。

両対応するのもそれほど難しくはないと思いますが。

http://www.futomi.com/lecture/form/index.html

id:zachouR

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

参考にさせて頂きます。

2007/11/05 13:11:43
id:rev-9 No.2

rev-9回答回数61ベストアンサー獲得回数82007/11/05 11:11:08

ポイント27pt

 CGIの作りによる、ということになります。

 まずサーバー側の仕組みとしては、POSTとGETとではまったく異なる手法でCGIプログラムにパラメーターが渡されます。ですのでここだけに着目すると、POSTで受け取るように作ればGETでは受け取れませんし、その逆も成り立ちます。

http://www.tohoho-web.com/wwwcgi3.htm

 ところが実際には、CGIがサーバーからパラメーターを受けとるというのは、どんなCGIでも共通の処理ですし、またPOSTとGETの処理にも共通の部分があります。そこで通常はPOSTでもGETでもどちらでも処理できるプログラムをあらかじめ用意しておき、それをモジュールとかライブラリとかいう手法で使い回します。

 では「通常はどちらでもOKだ」と言ってしまってよいかというと、これがまた断言しかねます。実際にCGIとFORMを作成していらっしゃるということですのでご理解いただけると思いますが、POSTよりGETのほうが、FORMで想定していない偽のパラメーターを送信することがたやすくできます。もちろんPOSTでも偽装は可能ですが、POSTの場合はそれなりのツールを用意する必要があるのに対し、GETであればブラウザのアドレス蘭にタイプするだけです。また「どのようなパラメーターが送信されているか」も、POSTよりGETのほうが貼るかに分かりやすくなります。

http://www.atmarkit.co.jp/fsecurity/rensai/httpbasic02/httpbasic...

 そのため、セキュリティを気にする局面では、「ちょっとその気になった悪戯」レベルの攻撃をふるい落とすために、CGI側でGETを無効にすることがあります。もちろんPOSTでもパラメーターの偽装は可能ですから、金銭なり会社の名誉なりが関わるような場合は、CGI内部で渡されたパラメーターの正当性をチェックしなければなりませんし、そうしたチェックを行っていれば、GETを無効にする必要性はありませんが。

id:zachouR

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

自分が作ったもので怖い部分がやはりセキュリティ(といっても大事なデータなどはないのですが)面です。

なにか、どこかの誰かが遊び半分で変なデータを投げられたときに、壊れたりしないかどうか?

というのが一番の不安でした。チェックは考えつく限りたくさんやってますが。

参考になりました。ありがとうございます!

2007/11/05 13:11:17
id:nikuzure No.3

nikuzure回答回数89ベストアンサー獲得回数02007/11/05 12:01:53

ポイント26pt

http://www.futomi.com/lecture/form/index.html

上記のサイトに解説がありますが「POST」と「GET」は別のものです。

ですので、意図的に分ける作りにしてある場合は、POST の値と同じキーを

GET で渡しても、何もデータを送らない事と同じになります。

逆に、意図的に同じ値として受け取るようにしてあった場合は、

処理が実行されます。

id:zachouR

ありがとうございます。

つまり現在は自分はPOSTで受け取るようにしているので、GETで無理矢理送られても動作しない、という事で理解しました。

おそらく両方うけとれるようにするには、こうするのかな、、、という検討もつきました。

ありがとうございます。

2007/11/05 13:09:01

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません