- PR -

F5連打アタックを防止する策って・・

投稿者投稿内容
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-07-22 01:39
こんばんわ。
Apache+TomcatでWEBアプリを開発中なのですが、
DBアクセスするページでF5(更新ボタン)を連打されると
連打された数だけDBにアクセスします。

POSTページならまだしもGETの場合、
アクセスに対して純粋に応答を返しますよね。

ConnectionPoolを使い、F5連打しながら、DB(Oracle)の状態を
見るとOracleセッションが半端じゃない数に膨れ上がっていました。

ルータやサーバソフトの設定も必須ですが、
アプリ側の対策としてみなさんどのようにしていますか?

みんなも悩んでいるところなのかな・・・?
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-07-22 09:44
リロード対策ですね。
私は、「リロードID」と呼んでいるIDを毎回発行し、
POSTで渡されたものとセッションに登録されたものを比較し、
リロードを防止するという方法をいつも取っています。
Shane
大ベテラン
会議室デビュー日: 2003/06/06
投稿数: 132
お住まい・勤務地: Vancouver, BC
投稿日時: 2003-07-22 10:07
Strutsにはトークンというものがあるらしいですね。
以下のスレッドでどなたかが説明されていました。
アイディアは同じだと思います。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5399&forum=12&2
raystar
ぬし
会議室デビュー日: 2003/01/16
投稿数: 251
お住まい・勤務地: Tokyo/Japan
投稿日時: 2003-07-22 10:45
なるほど。。
確かにその方法使えますね。

参考になりました。
ありがとうございます!
tom
会議室デビュー日: 2003/04/16
投稿数: 2
投稿日時: 2003-07-23 11:28
すみません、本論とは関係ないのかもしれませんが...

> DBアクセスするページでF5(更新ボタン)を連打されると
> 連打された数だけDBにアクセスします。

これってDataSourceとかを使ってコネクションプーリングを
使用すれば回避できるのでは?
# それとは別にリロード対策は有効だとは思いますが。
_________________
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-07-23 11:49
引用:

tomさんの書き込み (2003-07-23 11:28) より:
これってDataSourceとかを使ってコネクションプーリングを
使用すれば回避できるのでは?


回避できません。
これはコネクションプーリングとは別の問題ではないでしょうか?
コネクションプーリングをしたからといって、
DBへのアクセスが発生しないわけではないので。
コネクションプーリングをすればパフォーマンスが向上するだけのことです。

だいたい、raystarさんは
引用:

ConnectionPoolを使い、F5連打しながら、DB(Oracle)の状態を
見るとOracleセッションが半端じゃない数に膨れ上がっていました。


とあるように、コネクションプーリングを行っています。
kito
ベテラン
会議室デビュー日: 2003/03/24
投稿数: 59
お住まい・勤務地: Osaka
投稿日時: 2003-07-23 13:39
>>tomさんの書き込み (2003-07-23 11:28) より:
>>これってDataSourceとかを使ってコネクションプーリングを
>>使用すれば回避できるのでは?

>回避できません。
>これはコネクションプーリングとは別の問題ではないでしょうか?

コネクションプーリングを使っていれば普通は最大接続数を設定しませんか?
ライセンス数やらパフォーマンスチューニングやらで。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2003-07-23 14:46
引用:

コネクションプーリングを使っていれば普通は最大接続数を設定しませんか?
ライセンス数やらパフォーマンスチューニングやらで。


設定します。
設定することによって、その最大接続数分しか、
DBのセッションは作成されなくなります。
しかし、F5押すことによる、
サーバーへのリクエストが無くなるわけではないですよね?
処理によっては同じ処理をして欲しくない場合もありますし。
Shinさんがあげているような手法でないと、
根本的な解決には至らないのではないかと思います。
例えば、
時間をキーにしてレコードを作成するようなことをしていれば、
F5を連打するたびにレコードが作成されてしまいますよね。
(普通こんなことしませんが・・・)

スキルアップ/キャリアアップ(JOB@IT)