ホーム > アーカイブ > 2009年4月16日のアーカイブ

2009年4月16日のアーカイブ

auto_prepend_fileで役割分担

[`evernote` not found]
[`grow` not found]
[`livedoor` not found]
[`yahoo` not found]
Delicious にシェア
このエントリーをはてなブックマークに追加

このブログ、12日の早朝よりスパム投稿の集中砲火をあびとります。
今朝出勤ししてから仕事を終えて戻るまでに
コメントスパムとトラックバックスパム両方で300件強。
あーめんどくさい。

広く知られた WordPress だけにスパム業者も解析済みのようで
コメントスパムもフォームを拾いに来た形跡がありません。
TBに至ってはフォームそのものが無関係なので
今回は Javascriptでスパム投稿対策 とはいかんようです。

スパム業者には早々退散願いたいところですが
WordPress に手を加えるのもなんだと思ったので
auto_prepend_file を使ってみました。

auto_prepend_file は、
リクエストされたPHPスクリプトの実行前に
自動で実行するスクリプトを指定するPHPの設定です。
自動 require みたいな事ができます。

コア php.ini ディレクティブに関する説明
auto_prepend_file

これが指定できるのは .htaccess です。
自動実行させたいスクリプトのパスが
‘/home/userdir/spamFilter.php’ だとすると
該当ディレクトリの .htaccess に次の1行を書き加えます。

.htaccess

php_value auto_prepend_file "/home/userdir/spamFilter.php"

これによりPHPスクリプトがリクエストされると
その実行前に必ず spamFilter.php が実行されます。
自動実行される spamFilter.php は、
普通のPHPスクリプトと変わりなくなんでも出来ます。
ただし、対象のディレクトリ以下全てのPHPスクリプトの実行前に
必ず実行されることになるので使いどころ注意です。

今回はスパム投稿をハネて余分なサーバーの負荷を
減らせれば良いので、POSTメソッド以外はサッサとスルーさせ
残りをブラックリストでフィルタリングです。
引っかかったやつには、
「404 Not Found + 本文無し」 のレスポンスです。

spamFilter.php

<?php
if ('POST' === $_SERVER['REQUEST_METHOD']):
    $__isSPAM = false;

   /**
    * このへんは、UAやHost、Proxyっぽいものなど
    * 適当にブラックリストでフィルタリング。
    * 該当する場合は $__isSPAM = true; にする。
    */

    if (true === $__isSPAM) {
        header('HTTP/1.0 404 Not Found');
        exit();  // SPAMに本文は不要!
    }
endif;
?>

auto_prepend_file でこうした役割を持たせれば
アプリケーションに手を加えることもなく本来の役割に専念させられます。

ホーム > アーカイブ > 2009年4月16日のアーカイブ

Ad
Apache
MySQL
PHP
お気に入り
ん。。。。。。広告
アーカイブ
Ad

ページの上部に戻る