[Slashdotjp-dev 14] ACの連続投稿の制限

Zurück zum Archiv-Index

Oliver M. Bolzer olive****@faker*****
2004年 1月 16日 (金) 07:20:38 JST


Oliverです。

9月中旬に告知した数日後にスイッチオンしたつもりになってたものを
数週間後に「動いてねぇ」と気がついた。が、プラシーボ効果(?)か、
告知の数日後から、まるで対策が効いているみたいだったので、なぜ
動いてないのか詳しく調査してなかった。

が、ここんところ、連続投稿が増えていた感じだったので、調べてみた
ところ、2-300コメントを越えるストーリではコメントの10%以上が同一
IPIDから、ということがザラだった。率としては低いが、office氏の
ストーリではなんと、54ものコメントが単一のIPIDから来ていた。
すべてコメントが30分以内に行われたのではないが、3-4個づつ、
クラスタ爆弾よろしく数時間おきに投下されていたが、この対策によって
大量投稿の「勢い」をそげることに期待したい。

で、なぜ対策が有効になってないか調べてみたら、昨夏に書かれ、テストも
されてたコードが本番環境に入ってなかった..... (- -#

コードをイヂらずとも、管理画面から変数をセットするだけでスイッチ・オフ
もできるように改良した、以下のコードをライブサイトに追加した。

diff -u -3 -p -r1.7 -r1.10
--- comments.pl	5 Jul 2002 04:44:58 -0000	1.7
+++ comments.pl	15 Jan 2004 13:56:32 -0000	1.10
@@ -2,7 +2,7 @@
 # This code is a part of Slash, and is released under the GPL.
 # Copyright 1997-2001 by Open Source Development Network. See README
 # and COPYING for more information, or see http://slashcode.com/.
-# $Id: comments.pl,v 1.7 2002/07/05 04:44:58 tach Exp $
+# $Id: comments.pl,v 1.10 2004/01/15 13:56:32 oliver Exp $
 
 use strict;
 #use Date::Manip;  # is this needed?  -- pudge
@@ -690,6 +690,19 @@ sub submitComment {
 		$slashdb->resetFormkey($form->{formkey});
 		editComment(@_, $error_message);
 		return(0);
+	}
+
+	if ($constants->{anonymous_comment_interval} && ($user->{is_anon} || $form->{postanon})) {
+		my $ipid = getCurrentUser('ipid');
+		my $ipid_count = $slashdb->sqlSelect('count(*)', 'comments',
+			"sid='$form->{sid}'
+			AND uid=1
+			AND date > SUBDATE(NOW(), INTERVAL $constants->{anonymous_comment_interval} MINUTE)
+			AND ipid='$ipid'");
+		if ($ipid_count > 0) {
+			editComment(@_, getError('anonymous_comment_interval'));
+			return 0;
+		}
 	}
 
 	$tempComment = strip_mode($tempComment, $form->{posttype});


完璧ではないが、今以上の情報を記録しないでできる精一杯といったところ。

-- 

	Oliver M. Bolzer
	olive****@gol*****

GPG (PGP) Fingerprint = 621B 52F6 2AC1 36DB 8761  018F 8786 87AD EF50 D1FF



Slashdotjp-dev メーリングリストの案内
Zurück zum Archiv-Index