ホーム > PHP

PHPのアーカイブ

SQLインジェクション発見

SQLインジェクション発見PHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on Delicious
このエントリーをはてなブックマークに追加

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

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

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

解析結果レポート

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

攻撃が検出されたログ

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

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

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

$_SERVER['HTTP_*'] はクライアントの値PHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on Delicious
このエントリーをはてなブックマークに追加

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

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

$_SERVER['HTTP_VIA']
$_SERVER['HTTP_X_FORWARDED_FOR ']
続きを読む

auto_prepend_fileで役割分担

auto_prepend_fileで役割分担PHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on 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 でこうした役割を持たせれば
アプリケーションに手を加えることもなく本来の役割に専念させられます。

staticなプロパティの使いどころ

staticなプロパティの使いどころPHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on Delicious
このエントリーをはてなブックマークに追加

PHP4とPHP5の違うところメモ第2段です。

PHP5からは、static を指定したプロパティは
インスタンス化しなくてもアクセス出来るよう変わりました。
static キーワード

以下のようなオブジェクトの入れ物的な静的クラスがスマートに書けます。
PHP4、5のどちらも register::set($object) でオブジェクトを登録し
register::get($className) で取りだします。
続きを読む

オブジェクトに対する代入演算子の挙動の違い

オブジェクトに対する代入演算子の挙動の違いPHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on Delicious
このエントリーをはてなブックマークに追加

PHPの基礎体力でお世話になっているレンタルサーバー屋さんが
PHP5環境を用意してくれたので、只今PHPの基礎体力をPHP5に移行作業中です。
PHP4とPHP5で違うところをメモっておきます。

PHP4 では、オブジェクトを複製する時は = で、
リファレンスの時は =& 演算子を使いました。

/**
 * PHP4
 */
$object1 = new stdClass; 

// $object2を$object1の複製で初期化
$object2 = $object1;

// $object3を$object1のリファレンスで初期化
$object3 =& $object1;

これがPHP5になると、オブジェクトを複製する時は = clone
リファレンスの時は = となるので
複製のつもりで代入演算子を使ってるところは = clone に直す必要あり。
続きを読む

@演算子のパフォーマンス

@演算子のパフォーマンスPHPで翻訳三昧
Bookmark this on Livedoor Clip
Bookmark this on Yahoo Bookmark
Bookmark this on Delicious
このエントリーをはてなブックマークに追加

エラー出力を制御する@演算子のパフォーマンスについて
MyRSS.jpさんとこのブログで興味深い実測をされてました。

「@」でエラー抑制すると PHP が遅くなるという噂について
@を使った場合、何も使わなかった場合、isset()を使った場合の
3つについてパフォーマンスを比較されています。

ふと、予め「初期化した値」だと違ってくるのか?
と思ったのでこれにのっかってみました。
続きを読む

ホーム > PHP

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

ページの上部に戻る