hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

19年6月26日(Wed) 14時09分
TOP » UsersWiki » nao-pon » blog » 2006-08-28

POST SPAM 対策を考える anchor.png

最近、POST SPAM がうざい鬱陶しいので、ちょっと対策を考えてみました。

面倒なので、XOOPS全体でPOST時にチェックをかけてみます。

Page Top

HypCommonFunc に関数を追加。 anchor.png

<a>タグの数、BBコードの[URL=]の数、URLの数をカウントします。

汎用関数の get_postspam_avr() で POSTデータ中に含まれる合計を取得できます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
	// POST SPAM Check
	function PostSpam_Check($post)
	{
		static $filters = NULL;
		if (is_null($filters)) {$filters = HypCommonFunc::PostSpam_filter();}
		$counts = array();
		$counts[0] = $counts[1] = $counts[2] = $counts[3] = 0;
		foreach($post as $dat)
		{
			$tmp = array();
			$tmp['a'] = $tmp['bb'] = $tmp['url'] = $tmp['filter'] = 0;
			if (is_array($dat))
			{
				list($tmp['a'],$tmp['bb'],$tmp['url'],$tmp['filter']) = HypCommonFunc::PostSpam_Check($dat);
			}
			else
			{
				// <a> タグの個数
				$tmp['a'] = count(preg_split("/<a.+?\/a>/i",$dat)) - 1;
				// [url] タグの個数
				$tmp['bb'] = count(preg_split("/\[url=.+?\/url\]/i",$dat)) - 1;
				// URL の個数
				$tmp['url'] = count(preg_split("/(ht&#x7c;f)tps?:\/\/[^\s]+/i",$dat)) - 1;
				// フィルター
				if ($filters)
				{
					foreach($filters as $reg => $point)
					{
						$counts[3] += (count(preg_split($reg,$dat)) - 1) * $point;
						//echo $dat."<br>".$reg.": ".$counts[3]."<hr>";
					}
				}
			}
			$counts[0] += $tmp['a'];
			$counts[1] += $tmp['bb'];
			$counts[2] += $tmp['url'];
			$counts[3] += $tmp['filter'];
		}
		return $counts;
	}
	
	// POST SPAM フィルター
	function PostSpam_filter($reg="", $point=1)
	{
		static $regs = array();
		if (empty($reg)) {return $regs;}
		$regs[$reg] = $point;
	}
	
	// POST SPAM Check 汎用関数
	function get_postspam_avr($alink=1,$bb=1,$url=1)
	{
		if ($_SERVER['REQUEST_METHOD'] == 'POST')
		{
			list($a_p,$bb_p,$url_p,$filter_p) = HypCommonFunc::PostSpam_Check($_POST);
			return $a_p * $alink + $bb_p * $bb + $url_p * $url + $filter_p;
		}
		else
		{
			return 0;
		}
	}
Page Top

XOOPS_ROOT/include/common.php の最後に次の内容を書き加えます。 anchor.png

この例では、ゲストは 15ポイント超、ログインユーザーは 30ポイント超で、弾かれます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
	// PostSpam をチェック by nao-pon
	HypCommonFunc::PostSpam_filter("/((?:ht&#x7c;f)tps?:\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+).*?<a.+?\\1.+?\/a>.*?\[url=\\1.+?\/url\]/is", 11);
	if (!is_object($xoopsUser))
	{
		if (HypCommonFunc::get_postspam_avr() > 15)
		{
			header("Location: ".XOOPS_URL."/");
			exit();
		}
	}
	else if (!$xoopsUserIsAdmin)
	{
		if (HypCommonFunc::get_postspam_avr() > 30)
		{
			header("Location: ".XOOPS_URL."/");
			exit();
		}
	}

しばらく、これで様子を見てみて調子がいいようなら CVS に投入します。


  • おおおおおぉぉぉぉぉぉ!!はじくテキストパターンも簡単に追加できるようになるといいなぁ。でもこのままでも最高! -- t_miyabi 2006-08-28 (月) 16:12:15
  • そうですね。テキストパターンフィルターも必要ですね。ということで上記のコードを修正しました。
    正規表現のフィルターとその加算ポイントを追加できます。
    とりあえず追加したフィルターは、
    HypCommonFunc::PostSpam_filter("/((?:ht|f)tps?:\/\/[!~*'();\/?:\@&=+\$,%#\w.-]+).*?<a.+?\\1.+?\/a>.*?\[url=\\1.+?\/url\]/is", 11);
    です。
    -- nao-pon&trip("iq8llSWq9g"); 2006-08-29 (火) 10:51:32



Post a new comment

Subject
guestname
Body

Go to richer form

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 7267, today: 3, yesterday: 3
Princeps date: 2006-08-28 (Mon) 09:11:29
Last-modified: 2006-08-29 (Tue) 10:51:32 (JST) (4684d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証 | SSLログイン

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 50 人がオンライン中 :-)
(UsersWiki : 3 人)

登録ユーザ: 0 & ゲスト: 50

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4606


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報
No trackback