自作のPHPスクリプトで掲示板を運営しています。

最近連続投稿(同時投稿)の書き込みが増えてきて
対策をしたいと思っています。

掲示板の仕組みはフォームへ入力された内容を
データベースへinsertしています。

対策として、insertをする前に最近のレコードに同じ内容が
ないかチェックしてあった場合は書き込みをしないという風に
しています。

自分で試す分にはこの対策は有効のようなのですが
どうやっているのか、この方法を掻い潜って連続投稿を
している人がいるのです。

しかも、投稿日時を見ると全く同じ時間、同じ内容で数件の
書き込みがなされています。

書き込み内容からすると、偶然このようなことがおきているというより
特定のユーザーが意図的にやっている様に思われます。

こちらで再現が出来ないので対策が出来なくて困っています。
掲示板を荒らす人特有のやり方やツールなどがあるのでしょうか?
有効な対策はあるでしょうか?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/09/06 11:08:35
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:b-wind No.1

回答回数3344ベストアンサー獲得回数440

ポイント27pt

対策として、insertをする前に最近のレコードに同じ内容が

ないかチェックして

ってことは、完全同時にアクセスすればわずかなタイミングだけど INSERT される前に同じデータがないとチェックを通ってしまう可能性があるわけですね。

DBの種類によりますが、その部分だけごく簡単に対策するなら TABLE ロックをかけてチェックする時間をずらしてやるという方法がとれます。


また、同時に同内容ということであれば、F5 キー連打も含めごく簡単にツールを作れます。

入力画面で Cookie を発行し、投稿画面で事前に発行した Cookie がないと投稿できないなどの仕組みが考えられます。


もっとも、こうした対策はいたちごっこになるのは見えているので出来ればスパム対策機能をもった掲示板への乗り換えをお勧めしますが。

id:pahoo No.2

回答回数5960ベストアンサー獲得回数633

ポイント27pt

その仕組みですと、同時に複数のページを立ち上げて同時に書き込まれたら連投できてしまうのではないでしょうか。(書き込みテスト・プロセスを作って、同時に複数走らせてみてください)


Cookieで連投を防ぐ方法もありますが、異なるブラウザやPCからの連投を防ぐことはできません。

あとは、同一IPアドレスによる連投をチェックするか――これだと、社内からアクセスしている人には不便をかけることになってしまいます。


b-wind さんがアドバイスしているように、DBのキューを1本に絞ってTABLEにロックをかけるのが緊急避難的対応でしょう。

また、そういう連投行為をする人のIPは限定的でしょうから、そのIPをアクセス禁止にするなどが有効と思われます。

id:hrhakbn

>(書き込みテスト・プロセスを作って、同時に複数走らせてみてください)

これって具体的にはどのようにすればいいのでしょうか?

2008/09/03 19:50:28
id:pahoo No.3

回答回数5960ベストアンサー獲得回数633

ポイント26pt

> これって具体的にはどのようにすればいいのでしょうか?

あまり具体的に書いてしまうと、攻撃者を利するような気がしますので‥‥

PHPをご利用のようですので、「PHP マルチスレッド」でググってみてください。関連情報が出てきます。

id:hrhakbn

ありがとうございます。

いろいろ調べて見ます。

2008/09/06 11:08:23

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

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

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

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

回答リクエストを送信したユーザーはいません