|
1: 2006-08-28 (月) 09:11:29 |
| + | #freeze uid:1 aid:0 gid:0 |
| + | // author:1 |
| + | // author_ucd:dQh9JbjdAEAY nao-pon |
| + | ** POST SPAM 対策を考える [#w5112b87] |
| + | #keyword() |
| + | #category(#right,:Blog,プログラミング) |
| | | |
| + | 最近、POST SPAM が%%うざい%%鬱陶しいので、ちょっと対策を考えてみました。 |
| + | |
| + | 面倒なので、XOOPS全体でPOST時にチェックをかけてみます。 |
| + | |
| + | *** HypCoomonFunc に関数を追加。 [#h56d27c3] |
| + | |
| + | <a>タグの数、BBコードの[URL=]の数、URLの数をカウントします。 |
| + | |
| + | 汎用関数の get_postspam_avr() で POSTデータ中に含まれる合計を取得できます。 |
| + | |
| + | <<< |
| + | // POST SPAM Check |
| + | function PostSpam_Check($post) |
| + | { |
| + | $counts = array(); |
| + | $counts[0] = $counts[1] = $counts[2] = 0; |
| + | foreach($post as $dat) |
| + | { |
| + | $tmp = array(); |
| + | $tmp['a'] = $tmp['bb'] = $tmp['url'] = 0; |
| + | if (is_array($dat)) |
| + | { |
| + | list($tmp['a'],$tmp['bb'],$tmp['url']) = 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|f)tps?:\/\/[^\s]+/i",$dat)) - 1; |
| + | } |
| + | $counts[0] += $tmp['a']; |
| + | $counts[1] += $tmp['bb']; |
| + | $counts[2] += $tmp['url']; |
| + | } |
| + | return $counts; |
| + | } |
| + | |
| + | // 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) = HypCommonFunc::PostSpam_Check($_POST); |
| + | return $a_p * $alink + $bb_p * $bb + $url_p * $url; |
| + | } |
| + | else |
| + | { |
| + | return 0; |
| + | } |
| + | } |
| + | >>> |
| + | |
| + | *** XOOPS_ROOT/include/common.php の最後に次の内容を書き加えます。 [#ke28541f] |
| + | |
| + | この例では、ゲストは 15ポイント、ログインユーザーは 30ポイントで、弾かれます。 |
| + | |
| + | <<< |
| + | // PostSpam をチェック by nao-pon |
| + | 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 に投入します。 |
| + | ---- |
| + | #comment(,btn:つっこみ) |
| + | ---- |
| + | ***似たような BLOG [#y2738dca] |
| + | #blogs(like) |
| + | #ping(http://www.blogpeople.net/servlet/weblogUpdates,http://i-uranai.net/tb.php/aries/) |