ホーム > PHP
PHPのアーカイブ
SQLインジェクション発見
- 2009-04-23 木 22:51:22
- PHP
IPA情報処理推進機構さんで提供されてる
ウェブサイトの脆弱性検出ツール iLogScanner が
昨年11月にバージョンアップしてました。
って、気付くの遅いですね。
気にしてたつもりでしたがアナウンスを見逃してたようです。
個人サイトだと、第三者から客観的に
サイト内を見てもらう機会ってそうありませんし
アプリケーションの現状での脆弱性を確かめられるので
まだの方は使ってみてください。
さて、PHPの基礎体力のココ2日分のアクセスログを
チェックしてみたところこの度はじめて検出されました。
SQLインジェクションが 176件、このうち
攻撃が成功した可能性の高い件数は 0件という結果です。
攻撃とみなされたアクセスは、こんな感じで解析ログに記録されます。
攻撃部分のコード掲載はやめときますが
すべて副問合せを含んだSQLだったので
うちのサーバではまったく機能しない攻撃でした。
とはいえ、持ちあわせの知識で
考えられる限りのこんな対策を施しています。
続きを読む
$_SERVER['HTTP_*'] はクライアントの値
- 2009-04-19 日 22:01:58
- PHP
スパム投稿の特徴を見つけ出すのに、どんな値を
ログに記録してたらいいのか試行錯誤してたところ、
PHPがあらかじめ用意してくれるスーパーグローバル変数
$_SERVER の中でキーが HTTP_ で始まるものが
クライアントが送信してきた値だとつい最近知りました。
よく Proxy が付加してくる Via や X-Forwarded-For など
全て大文字で、- (ハイフン)は _ (アンダーバー) に変換され
こんなキーで得られます。
$_SERVER['HTTP_VIA']
$_SERVER['HTTP_X_FORWARDED_FOR ']
続きを読む
auto_prepend_fileで役割分担
- 2009-04-16 木 00:19:33
- PHP
このブログ、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なプロパティの使いどころ
- 2009-03-05 木 03:44:23
- PHP
PHP4とPHP5の違うところメモ第2段です。
PHP5からは、static を指定したプロパティは
インスタンス化しなくてもアクセス出来るよう変わりました。
static キーワード
以下のようなオブジェクトの入れ物的な静的クラスがスマートに書けます。
PHP4、5のどちらも register::set($object) でオブジェクトを登録し
register::get($className) で取りだします。
続きを読む
オブジェクトに対する代入演算子の挙動の違い
- 2009-02-23 月 19:02:00
- PHP
PHPの基礎体力でお世話になっているレンタルサーバー屋さんが
PHP5環境を用意してくれたので、只今PHPの基礎体力をPHP5に移行作業中です。
PHP4とPHP5で違うところをメモっておきます。
PHP4 では、オブジェクトを複製する時は = で、
リファレンスの時は =& 演算子を使いました。
/** * PHP4 */ $object1 = new stdClass; // $object2を$object1の複製で初期化 $object2 = $object1; // $object3を$object1のリファレンスで初期化 $object3 =& $object1;
これがPHP5になると、オブジェクトを複製する時は = clone で
リファレンスの時は = となるので
複製のつもりで代入演算子を使ってるところは = clone に直す必要あり。
続きを読む
@演算子のパフォーマンス
- 2008-05-11 日 03:18:16
- PHP
エラー出力を制御する@演算子のパフォーマンスについて
MyRSS.jpさんとこのブログで興味深い実測をされてました。
「@」でエラー抑制すると PHP が遅くなるという噂について
@を使った場合、何も使わなかった場合、isset()を使った場合の
3つについてパフォーマンスを比較されています。
ふと、予め「初期化した値」だと違ってくるのか?
と思ったのでこれにのっかってみました。
続きを読む
ホーム > PHP
- Ad
- Apache
- MySQL
- PHP
- お気に入り
- ん。。。。。。広告
- アーカイブ
-
- 2012年4月 (1)
- 2012年3月 (2)
- 2011年8月 (1)
- 2011年7月 (1)
- 2010年7月 (1)
- 2010年6月 (2)
- 2010年5月 (1)
- 2010年4月 (3)
- 2010年3月 (2)
- 2010年2月 (1)
- 2010年1月 (1)
- 2009年11月 (1)
- 2009年5月 (3)
- 2009年4月 (5)
- 2009年3月 (8)
- 2009年2月 (2)
- 2008年11月 (1)
- 2008年7月 (1)
- 2008年5月 (3)
- 2008年4月 (4)
- 2008年3月 (1)
- 2007年12月 (2)
- 2007年8月 (1)
- 2007年7月 (4)
- 2007年6月 (4)
- 2007年5月 (2)


