2012-05-28

[Node.js] uncaughtException イベントでスタックトレースを出す

公式ドキュメントのコードをそのまま使うと、デフォルト動作時にはプロセス終了とともに表示されていたスタックトレースを握りつぶすことになるので、混乱を避けるためスタックトレースを出しておくのがお勧めです。

公式にはエラーオブジェクトの仕様が載っていませんが、スタックトレースを取り出すには、node docs :: What is the error object? の通り、error.stack を読み取れば良いようです。中身は human-readable な文字列なのでそのまま出力できます。

console.error とは Node.js では STDERR に出力する console.log です。

process.on('uncaughtException', function (error) {
    console.error('uncaughtException: ' + error.stack);
});

setTimeout(function () {
    throw new Error('something happened');
}, 1000);

/*
出力例:

uncaughtException: Error: something happened
    at Object._onTimeout (C:\Users\hideki\Desktop\uetest.js:7:8)
    at Timer.ontimeout (timers.js:94:19)
*/

Event: 'uncaughtException' - node.js Manual & Documentation

2012-05-25

Google 検索の SSL 有効化に伴うキャンペーン

Google ウェブマスター向け公式ブログ で紹介されている通り行動すると…
  1. 流入キーワードが見れなくなり気になる人が仕方なく Google Webmaster Tools に登録する
  2. サイト管理者宛に Google のオンライン広告プログラム AdWords のクーポン5000円分が届く
  3. クーポンは課金を有効にしないと使えないと分かり、しぶしぶ課金情報を入力する
  4. Google は課金会員を獲得!

2012-05-24

[windows] EMET v3.0 を導入してみました

Microsoft より興味深いアプリケーション EMET (Enhanced Mitigation Experience Toolkit) の新しいバージョン v3.0 がリリースされたとアナウンスがあったので試してみました。このアプリケーションは攻撃者の任意のコードの実行を許してしまうシェルコードを実行しないようにすることで攻撃を緩和するソフトウエアで、適切に使用することで未知の脆弱性に対する攻撃からも保護される可能性があります。

常用範囲ではパフォーマンスの劣化は特に感じないので、副作用が出ても自力で対処できる方 (強制終了により保護される仕組みなので未保存の作業内容が失われても怒らずに、保護オプションを調整できる方) はぜひ試すと良いと思います。標的型攻撃にさらされる可能性が高い特異な方もぜひ導入をお勧めします。

インストールは こちらのマイクロソフト社のダウンロードページ から、Microsoft によるコード署名を確認しつつ導入しましょう。インストール最終段階で表示されるコマンドプロンプト画面は少し待つと消えるので待ちます。

残念ながらインストールしただけではダメで、インストール後にスタートメニューの Enhanced Mitigation Experience Toolkit > EMET 3.0 より初期設定を行います。不具合による訴訟を避けるため(?)初期設定は EMET によって保護されるアプリケーションは空になっているので、右下の Configure Application より保護するアプリケーションを追加します。開発者おすすめプロファイルが用意されているので、各自の責任で File > Import より、C:\Program Files (x86)\EMET\Deployment\Protection Profiles のAll.xml などを読み込むと簡単に設定できます。



Download: EMET - Microsoft Download Center - Download Details
EMET の最新バージョン EMET 3.0 を公開しました - 日本のセキュリティチーム - Site Home - TechNet Blogs
EMET (not Brown) « Brundle's Laboratory - おっしゃる通り、ワトソン博士に引き続き、今回は Back to the Future のあの博士の名前に似ています

2012-05-22

[apache] Error 410 (Gone) を返す設定

HTTP にてリソースの消滅を明示するために 404 Not Found よりも強力な 410 Gone を返すためには、.htaccess や httpd.conf にて以下のように設定すれば良いです。

# 単純な場合
Redirect gone /some/path

# より複雑な指定は正規表現を使用
RedirectMatch gone regexp

# 変なエラーコードが必要な場合(?)
Redirect 420 /some/path

mod_rewrite でも同様の設定は可能ですが、より標準的な mod_alias で良いと思います。
Redirect ディレクティブ - mod_alias - Apache HTTP サーバ