Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

GETとPOSTの判定について

こんにちは。まりもと申します。

現在フレームワークはStruts、ブラウザはIEを使って
開発をしています。
開発しているシステムではGETでリクエストがきた場合は
不正なアクセスとみなしてフィルタを使って処理をはじく
ことを考えています。

GETかPOSTの判定はHttpServletRequest#getMethod()を
使えば可能で、GETでリクエストがくる場合というのは
URL直接入力やお気に入りで飛んで来る場合だと思います。
質問したいのは、ブラウザの更新ボタンや戻るボタンで
リクエストがきた場合はGETかPOSTのどちらになるの
でしょうかということです。試したところGETで飛んで
きているようなのですが、更新ボタンや戻るボタンの
リクエストは必ずGETになるのでしょうか?

6

回答

16284

閲覧

6件の回答

評価

0

GETかPOSTかは、HTTPのリクエストヘッダに依存するので、ブラウザの仕様がどうなっているかですね。
たぶんそのページを表示するのに、どのメソッドで来たかによるんじゃないですかね?
もし気になるなら、Etherealとかのパケットキャプチャツールで確認してみるといいですよ。

それよりも、
>開発しているシステムではGETでリクエストがきた場合は
>不正なアクセスとみなしてフィルタを使って処理をはじく
>ことを考えています。
という実装に疑問を感じます。
アクセスしてくる人は、何もブラウザで来るとは限りませんよ?
明示的にヘッダにPOSTを指定されると、フィルタをすり抜けることになりますよ?

評価

0

ひろちゃん様、ご回答頂きありがとうございます。

>アクセスしてくる人は、何もブラウザで来るとは限りませんよ?
とのことですが、開発を行っているのはオンライン画面なので、
このシステムを使うのはブラウザからのアクセスを想定してます。
ひょっとして他にもWebアプリにアクセスする方法があるので
しょうか?StrutsもWebアプリを開発するのも初めてなので的外れ
な質問だったら申し訳ありません。

>たぶんそのページを表示するのに、どのメソッドで来たかによるんじゃないですかね?
GETかPOSTかについては、一応オンライン画面の開発規約でリクエストはPOSTしか使ってはいけないとあるので(この規約があったのでGETのリクエストははじきたいと考えていたのですが)、更新ボタンや戻るボタンの場合もPOSTということになるのではと思います。

評価

0

>ひょっとして他にもWebアプリにアクセスする方法があるので
>しょうか?StrutsもWebアプリを開発するのも初めてなので的外れ
>な質問だったら申し訳ありません。
Webサーバの80番ポートにHTTPリクエストヘッダを送信できれば、何ででも接続できてしまいます。
コマンドプロンプトからtelnetを使って接続することもできますよ。
http://www.rfs.jp/sb/perl/03/03.html

Perlのページですが、勉強になります。

もっと簡単な例だと、
クライアントに
<html>
<body>
<form action="WEBアプリのURL" method="POST">
<input type="submit">
</form>
</body>
</html>
みたいなHTMLファイルを作ってクリックすれば、フィルタを通ることになります。

私もこの辺を理解するのに苦労した記憶があります。
とにかく、Webアプリを作る時はクライアントを信用してはいけません。
何が送られてくるかわからないと、常に頭のなかに置いておく必要があります。
利用されるユーザーがすべて信用のおける方であるなら問題無いのですが。

評価

0

 ひろちゃん様、度々ご回答頂きありがとうございます。

>コマンドプロンプトからtelnetを使って接続することもできますよ。
telnetですか・・・。確かにそうですね。穴はいろいろありそうです。本当に勉強になりました、重ねて御礼申し上げます。

アクセス制限をどうするかについてもう少し検討してみたいと思います。

評価

0

まだ見てるかな?
Strutsには、まりもさんがされたい処理っていうのがあらかじめ実装されているので、普通はそれを使います。
それがなんだったか思い出せなくて、探してました。(汗)
ActionクラスのsaveToken()ってやつです。
本来は2重押し防止に使ったりするものなんですが、セッションが正しいか判定するのにも使えます。

http://muimi.com/j/jakarta/struts/struts5.html

ここに使い方が載っています。

後々使うことになると思うので、覚えとくといいかも。

評価

0

ひろちゃん様、私のためにわざわざ調べてくださったみたいで・・・恐縮です。Strutsにも標準でまだまだ知らない機能があるようなので勉強してみます。

自分もいつかひろちゃん様のお役に立てる知識をもてるよう努力いたします。本当にお世話になりました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。