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

TOP » UsersWiki » nao-pon » blog » 2006-08-28 のバックアップ差分(No.1)
1: 2006-08-28 (月) 09:11:29 ソース
Line 1: Line 1:
 +#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/)


トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ   最新ページのRSS 1.0 最新ページのRSS 2.0 最新ページのRSS Atom Powered by xpWiki
Counter: 308, today: 1, yesterday: 0
このページのTopへ
メインメニュー
ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録
最近の更新
オンライン状況
345 人のユーザが現在オンラインです。 (4 人のユーザが UsersWiki を参照しています。)

登録ユーザ: 0
ゲスト: 345

もっと...
サイト情報