Nucleus

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

Nucleus のスキン変数<%if%>の新しい機能 [Nucleus]

2007年2月26日

 しづきさんも書いていたけれど、Nucleus バージョン 3.3 では、スキンの<%if%>がいくらか拡張される。

 気がついたのは、まず、プラグインで条件判定ができるdoIf()関数。これは、とっても便利。開発中のキャッシングプラグイン(半年も開発がストップしていて、開発中というのか?)で使用できる。また、NP_ExtendedIf は引退させるか、大幅に変更するかのどちらか。現在Nucleusでフォーラムを構築するためのスキンとプラグインを開発中だけれど、そのプラグインにも導入予定。

 他に気がついたのは<%elseif%>が使えるようになったこと。これの導入は3.24かなと思って、3.24がリリースされたときに試してみたけれど、まだだった。

$_SERVER[`HTTP_*`] [Nucleus]

2007年2月17日

 現在、NP_Firewallのデータ集めをしているところである。このデータを元に、NP_Firewall をインストールしたときのデフォルトセッティングを決めたい。

 $_SERVERの処理が悩ましい。現在どんな値が$_SERVERとして得られるか、データを収集中である。

SQLite の VACUUM [Nucleus]

2007年2月14日

 最近、このブログの表示がやけに遅いなと思っていた。症状としては、接続してから表示が始まるまでに少し待たされ、一度表示が始まるとさっと表示されるというもの。
 原因として考えられたのが、現在開発中のNP_Firewall。このプラグインは、まずデータベーステーブルの内容を呼び出し、$_POST や $_GET の値をそのテーブルの内容と比較するというもの。『こんなに遅いんじゃ、このプラグインはだめかな。開発をやめようか。』と考え始めていた。
 ところが、NP_SQLiteの管理画面から『バキューム』を実行すると、元通りのスピードに。SQLiteのデータベースファイルに垢がたまっていたのがスピードに影響していたらしい。
 というわけでSQLiteをご利用の皆さん、こまめにVACUUMを実行しましょう。ただし、同じくこまめにバックアップを取ることをお勧めします。『VACUUMに失敗』なんて事になる可能性が無いわけじゃないので(私は経験ありませんが)。

NP_PostLog [Nucleus]

2007年1月31日

 『NP_ProtectByMD5でスパムを軽くあしらう』で書いたように、index.php の冒頭でスパムかどうかのチェックを行っているのであるが、一日に3-4個のPOSTアクセスがこのチェックルーチンをすり抜けている。最終的にはスパムコメントは書き込まれていないため、NP_ProtectByMD5でブロックしているようであるが、ログを取っていないためにどのような値がPOSTされたか不明である。

 そこで、そのようなケースにおいてPOSTされた値のログをとるプラグインを作成した。

NP_CaptchaSL [Nucleus]

2007年1月30日

 スパム対策ロードマップに従って、スーパーライト版NP_Captchaを作成した。

 このプラグインはNP_Captcha同様に画像認証によりスパムを撃退するものであるが、認証用の画像はこのプラグインをダウンロードするときに一度きり作成されるだけである。インストールした後は認証用の画像を作成しないので、GDがインストールされていないサーバ環境でも使用可能である。画像作成を行わないことに加えて独自のMySQLテーブルも持たないため、オリジナルのNP_Captchaに比べてサーバへの負担がかなり低いはず。

 反面、一度認証キーが破られてしまうと、スパムを連続して送られてしまうことはありうる。そういったケースでは、このプラグインをもう一度ダウンロードしなおして、上書きインストールをすればよい。こうすることで、認証画像を変更することが出来る。

 NP_CaptchaSLをダウンロードするには、ここをクリックしてください。

NP_CaptchaSLを提供するためのダウンローダー(NP_CaptchaSLDL)は、公式フォーラムからダウンロードしてください。

スパム対策ロードマップ [Nucleus]

2007年1月25日

このサイトで行おうとしている、コメントスパム対策のロードマップ。

1)NP_JSEncodeもしくはJavaScriptによる対策(注意:この方法だけでは防御が甘いため、この段階は既に過去のものになっている)

2)NP_ProtectByMD5 による対策(現在の状態)

3)NP_ProtectByMD5 + JSEncode

4)NP_ProtectByMD5 + NP_ProtectByAjax

5)スーパーライト版 NP_Captcha

6)ライト版 NP_Captcha

7)NP_Captcha

NP_WordCountJP [Nucleus]

2007年1月10日

 NP_WordCountJPなるプラグインを作成した。テンプレート変数として使用。

<%WordCountJP%> 記事の文字数を表示(本文と続きをあわせたもの)
<%WordCountJP(title)%> 記事のタイトルの文字数を表示
<%WordCountJP(body)%> 記事の本文の文字数を表示
<%WordCountJP(more)%> 記事の続きの部分の文字数を表示

<?php 
class NP_WordCountJP extends NucleusPlugin { 
    function getName() { return 'NP_WordCountJP'; }
    function getMinNucleusVersion() { return 220; }
    function getAuthor()  { return 'Katsumi'; }
    function getVersion() { return '0.1'; }
    function getURL() {return 'http://hp.vector.co.jp/authors/VA016157/';}
    function getDescription() { return $this->getName().' plugin'; } 
    function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
    function doTemplateVar(&$item,$type='') {
        switch(strtolower($type)){
        case 'title':    return $this->showlen($item->title);
        case 'body':    return $this->showlen($item->body);
        case 'more':    return $this->showlen($item->more);
        default:    return $this->showlen($item->body.$item->body);
        }
    }
    function showlen($text){
        mb_language('ja');
        mb_internal_encoding(_CHARSET);
        echo mb_strlen($text);
    }
}
?>

NP_FormTicket [Nucleus]

2007年1月4日

 コメントフォームに単純にticket処理を追加するだけのプラグインを作成した。21行だけの、非常に小さなプラグイン。

 NP_JSEncodeと組み合わせれば、HTMLを調査せずに決め打ちで投稿してくるスパムに対処できる。

 また、mixiの『はまちちゃん』トラップのような、CSRF攻撃によるコメント投稿を防ぐことが出来るはず。

<?php 
class NP_FormTicket extends NucleusPlugin { 
    function getName() { return 'NP_FormTicket'; }
    function getMinNucleusVersion() { return 320; }
    function getAuthor()  { return 'Katsumi'; }
    function getVersion() { return '0.1'; }
    function getURL() {return 'http://hp.vector.co.jp/authors/VA016157/';}
    function getDescription() { return $this->getName().' plugin'; } 
    function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
    function getEventList() { return array('FormExtra','ValidateForm'); }
    function event_FormExtra(){
        global $manager,$member;
        $manager->addTicketHidden();
    }
    function event_ValidateForm(){
        global $manager,$member;
        if ($manager->checkTicket()) return;
        exit('<html><body>'._ERROR_BADTICKET.'</body></html>');
    }
}
?>

NP_ProtectByMD5でスパムを軽くあしらう [Nucleus]

2006年12月29日

 夕べ、4時間ほどの間に76回のコメントスパムの攻撃を受けたが、すべてNP_ProtectByMD5でブロックした。現在、NP_ProtectByMD5のテスト期間としているのでNP_JSEncodeはコメントスパム対策としては使っていないために、この攻撃を受けたものと考えている。
 結果としてはすべてブロックしたので、スパム業者は勝利を収めることが出来なかった。しかし、攻撃の間ずっとサーバのリソースを無駄に使い続けられたと考えると100%こちらの勝利とも言いがたい。こういったケースでのリソースの消費について考えてみた。

NP_ProtectByAjax [Nucleus]

2006年12月26日

 NP_JSEncode, NP_ProtectByMD5 に続く、スパム対策シリーズ第三弾。半分洒落のつもりで作ってみた(半分本気)。NP_JSEncodeでは、スパムロボットに読み込まれたくない部分をurl_encodeして記事に直接埋め込んでいたが、このNP_ProtectByAjaxではAjaxを用いて当該部分を別途読み込む形式。なので、より硬い防御が期待される。
 使用方法はNP_JSEncodeとほとんど同じであるが、プラグイン編集オプションからキャッシュデータ(スパムロボットに対して隠蔽しているHTMLを保持する)を消去する機能が追加されている。
 私のブログは人気があまり無いおかげで、NP_JSEncode と NP_ProtectByMD5 でスパムコメントを完全にブロックできている。が、将来これらの方法でブロックできなくなるケースに対処するため、作ってみた。もともとは、NP_JSEncodeの次期バージョンに組み込む予定にしていたが、ちょっと思うところあって別プラグインとして開発。


(ここからダウンロードできます。)
<<前の記事   後の記事>>