- - PR -
F5連打アタックを防止する策って・・
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-22 01:39
こんばんわ。
Apache+TomcatでWEBアプリを開発中なのですが、 DBアクセスするページでF5(更新ボタン)を連打されると 連打された数だけDBにアクセスします。 POSTページならまだしもGETの場合、 アクセスに対して純粋に応答を返しますよね。 ConnectionPoolを使い、F5連打しながら、DB(Oracle)の状態を 見るとOracleセッションが半端じゃない数に膨れ上がっていました。 ルータやサーバソフトの設定も必須ですが、 アプリ側の対策としてみなさんどのようにしていますか? みんなも悩んでいるところなのかな・・・? | ||||||||
|
投稿日時: 2003-07-22 09:44
リロード対策ですね。
私は、「リロードID」と呼んでいるIDを毎回発行し、 POSTで渡されたものとセッションに登録されたものを比較し、 リロードを防止するという方法をいつも取っています。 | ||||||||
|
投稿日時: 2003-07-22 10:07
Strutsにはトークンというものがあるらしいですね。
以下のスレッドでどなたかが説明されていました。 アイディアは同じだと思います。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5399&forum=12&2 | ||||||||
|
投稿日時: 2003-07-22 10:45
なるほど。。
確かにその方法使えますね。 参考になりました。 ありがとうございます! | ||||||||
|
投稿日時: 2003-07-23 11:28
すみません、本論とは関係ないのかもしれませんが...
> DBアクセスするページでF5(更新ボタン)を連打されると > 連打された数だけDBにアクセスします。 これってDataSourceとかを使ってコネクションプーリングを 使用すれば回避できるのでは? # それとは別にリロード対策は有効だとは思いますが。 _________________ | ||||||||
|
投稿日時: 2003-07-23 11:49
回避できません。 これはコネクションプーリングとは別の問題ではないでしょうか? コネクションプーリングをしたからといって、 DBへのアクセスが発生しないわけではないので。 コネクションプーリングをすればパフォーマンスが向上するだけのことです。 だいたい、raystarさんは
とあるように、コネクションプーリングを行っています。 | ||||||||
|
投稿日時: 2003-07-23 13:39
>>tomさんの書き込み (2003-07-23 11:28) より:
>>これってDataSourceとかを使ってコネクションプーリングを >>使用すれば回避できるのでは? >回避できません。 >これはコネクションプーリングとは別の問題ではないでしょうか? コネクションプーリングを使っていれば普通は最大接続数を設定しませんか? ライセンス数やらパフォーマンスチューニングやらで。 | ||||||||
|
投稿日時: 2003-07-23 14:46
設定します。 設定することによって、その最大接続数分しか、 DBのセッションは作成されなくなります。 しかし、F5押すことによる、 サーバーへのリクエストが無くなるわけではないですよね? 処理によっては同じ処理をして欲しくない場合もありますし。 Shinさんがあげているような手法でないと、 根本的な解決には至らないのではないかと思います。 例えば、 時間をキーにしてレコードを作成するようなことをしていれば、 F5を連打するたびにレコードが作成されてしまいますよね。 (普通こんなことしませんが・・・) | ||||||||
