ホーム > PHP

PHPのアーカイブ

spamp:掲示板スパムバリデータ出来ました

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

掲示板スパム対策の取り組みもこれでひと区切りとしたいと思います。
PHPスクリプトのダウンロードとドキュメントはこちらです。
spamp : 掲示板スパムバリデータ

spampは、マルチバイトを含まない投稿をはじく、
投稿出来るURL数を限定する、
プロキシっぽいクライアントを拒否する、
といったフィルタはまったく使っていません。
CAPTCHA(画像認証)やパスワードによる認証でもありません。

掲示板スパムボットのプロファイリングから生まれた
ロジックで判定をおこなっています。

人がやれば簡単に突破できる
極めて単純な仕組みですが自動投稿ロボットにはこれが難しいのです。
いつか新手のロボットが現れるまでの繋ぎとはわかってますが
その時はまたプロファイリングしてロジックを組み直したいと思います。
ロボットを手先に、楽して一発儲けようとしてる
スパム業者なんぞには負けません。

それにしてもここ1ヶ月くらいで
コメントスパムのリクエスト数が激減。多い日でも3件程度に減りました。
このフィルタリングの影響・・・とは考え難いので
他にそれっぽい記事を見ないので
Waledacボットネットの件が影響してたのかな・・・。

さて最後に、WordPressのコメント投稿に
組み込んだ方法を紹介しておきます。
続きを読む

攻撃的?なリクエストをフィルタリングしてみる

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

PHPプログラミングを扱ってるからでしょうが
毎日なにかしらの攻撃的なリクエストがあります。

特定のURLに誘導するものとか、サーバーのコマンドを実行するものとか
SQLインジェクションとか、アプリケーションの脆弱性をつくものとか・・・
まあ、アクセスログにはいろいろと記録されてます。

4/2はこんな感じでした。
脆弱性をつく攻撃的なリクエストの図

攻撃者が、任意のコードやコマンドをうちのサーバーで
なんとか実行させようと試みてるのがみてとれます。

うちのサイトでこのようなリクエストは全部 Error404 ってことになり、
レスポンスにボディーは無し、コマンドも実行されることもありません。
今日は攻撃的なリクエストのフィルタリングについて書いてみます。
続きを読む

クリックだけで絞り込み検索

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

久しぶりにアプリケーション作ってみた。
名づけて『クリックだけで絞り込み検索』

こんな感じのことをやってるサイトをどっかで見かけ
いいアイデアと思ったけど、したはずのブックマークがみつからず
薄れかけてる記憶をたどりながらノベ5日かけて完成しました。
出来るときは何でも一気にできてしまうものです。

一般にあまり使われない専門用語がたくさんある業界だと
キーワード検索で目的の商品にたどり着くのは困難だけど
あらかじめキーワードが羅列してあるこの検索方法なら
ユーザーは何かしら次のアクションが取れるわけです。
これをプルダウンメニューの絞込み検索にすると見通しが悪い。

クリックだけで絞り込み検索
うちわ検索

素材はクライアントさんの商品を流用させていただきましたので
この先はホントのECサイトにつながってます。

文字を打つことなくキーワードを足したり引いたり、
クリックだけで検索出来る利便性もさることながら、
この検索に感じる一番の魅力は
検索されるキーワードとランディングページの関連付けを
操作できる可能性を持っていることです。

絞り込まる程に特定のキーワードに特化した検索結果になるので
「検索エンジンで上位に来てるけど見せたいページじゃない」
といったジレンマを解消する内部的なSEO対策になると思います。
続きを読む

SQLインジェクション発見

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

IPA情報処理推進機構さんで提供されてる
ウェブサイトの脆弱性検出ツール iLogScanner
昨年11月にバージョンアップしてました。
って、気付くの遅いですね。
気にしてたつもりでしたがアナウンスを見逃してたようです。

個人サイトだと、第三者から客観的に
サイト内を見てもらう機会ってそうありませんし
アプリケーションの現状での脆弱性を確かめられるので
まだの方は使ってみてください。

さて、PHPの基礎体力のココ2日分のアクセスログを
チェックしてみたところこの度はじめて検出されました。
SQLインジェクションが 176件、このうち
攻撃が成功した可能性の高い件数は 0件という結果です。

解析結果レポート

攻撃とみなされたアクセスは、こんな感じで解析ログに記録されます。

攻撃が検出されたログ

攻撃部分のコード掲載はやめときますが
すべて副問合せを含んだSQLだったので
うちのサーバではまったく機能しない攻撃でした。

とはいえ、持ちあわせの知識で
考えられる限りのこんな対策を施しています。
続きを読む

$_SERVER[‘HTTP_*’] はクライアントの値

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

スパム投稿の特徴を見つけ出すのに、どんな値を
ログに記録してたらいいのか試行錯誤してたところ、
PHPがあらかじめ用意してくれるスーパーグローバル変数
$_SERVER の中でキーが HTTP_ で始まるものが
クライアントが送信してきた値だとつい最近知りました。

よく Proxy が付加してくる ViaX-Forwarded-For など
全て大文字で、- (ハイフン)は _ (アンダーバー) に変換され
こんなキーで得られます。

$_SERVER[‘HTTP_VIA’]
$_SERVER[‘HTTP_X_FORWARDED_FOR ‘]
続きを読む

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

1 2 3 4

ホーム > PHP

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

ページの上部に戻る