Nucleus

Jeans & Development 電子ブロック工房 三日坊主 フロントページ

スパム対策ロードマップ [Nucleus]

2008年3月16日

スパム対策ロードマップを少し変更することを考えている。

Googleで『CAPTCHA』というキーで検索した場合に上位に出てくる記事に以下のものが有る。

CAPTCHAは愚策

CAPTCHAが人間に一手間とらせるのが嫌いと考えるのは私も同じで、だからこのサイトではProtectByMD5を採用している(JavaScriptを利用)のだが、この方法は上記サイトで提案している方法の一つである。ただ、心配されているとおり、ブラウザの機能をそのままスパムロボットが持ってしまった場合(実際には、これはそれほど難しくない)、そういったロボットにはJavaScriptの難しい計算は何の問題にもならなくなる。

NP_StopDraft [Nucleus]

2008年2月9日

3.31 SP1 にアップグレードしたついでに、オートドラフト機能を止めてしまおうと思った。いろいろ調べた結果、最も良く使われている方法は、javascript/xmlhttprequest.js をインクルードしなくするというもの。ただこの方法だと、コアをアップグレードする時に、そのつど変更をする必要がありそう。

一方で、NKJGさんがNP_StopAutoSavingDraftというプラグインを公開されている。やっぱりこれかなと思ってダウンロードしてみたら、思ったよりも高機能の様子。私としては、インストールすることでオートドラフトをストップするだけでよいので、結局は自作することにした。

URIに『#』か二つ以上の『?』を含むアクセスを禁止 [Nucleus]

2008年2月8日

サーバーログを見ていつも思うのだが、『index.php?itemid=123#nucleus_cf』などのURIにアクセスしてくるスパムが結構多い。なぜ『#』を含むURIにアクセスしてくるかは、個別アイテムページのコメントフォームのソースコードを見れば分かる。まともなブラウザなら、こんなことはしない。

また、『index.php?body=http://cracked.site.com/foo.php?』のように、『?』を2つ以上含むURIへのアクセスもある。こちらは、リモートコードインサーションを狙った、クラッキングのトライ。本来ならば、『?』は『%3F』にエンコードされるべきである。

以上の理由から、URIに『#』か二つ以上の『?』を含むアクセスを禁止することにした。index.phpに次のコードを追加することで、対処した。
// refuse # and ? in URL
if (preg_match('/(#|\?[^\?]*\?)/',$_SERVER['REQUEST_URI'])) {
    exit("<html><body>URI shouldn't contain '#' and 2x'?'. Please check the browser/robot setting.</body></html>");
}

Nucleus 3.31 SP1 出ました。 [Nucleus]

2008年2月6日

MySQL版、SQLite版共に、日本語バージョンの 3.31 SP1 が出ました。今回のバージョンは、XSS脆弱性の修正が入っていますので、必ずアップグレードを行うようにしてください。

globalfunctions.phpに関する考察 [Nucleus]

2007年12月17日

某掲示板でも指摘されていた、globalfunctions.phpについて。この記事の最後に、globalfunctions.phpの概要をまとめてみた。それを参考に話を進めたい。まず始めに確認しておきたいのは、globalfunctions.phpはconfig.phpから呼び出されるため、Nucleusの何かしらの機能を使おうとすると必ずパースされることである。ここにある無駄は、Nucleusの機能全体に影響を及ぼす。

Nucleusの長所と短所 [Nucleus]

2007年12月17日

Nucleus は、私としてはとてもお気に入りのツールなのだけれど、当然ながら長所もあれば短所もある。最も気に入っているは、プラグインインターフェースが充実していて、プラグインを自分で書けばいろいろなことが出来てしまうところ。反面、これはだめだなぁと思うのは、とにかくSQLクエリーの数が多いこと。デフォルトスキンではせいぜい10回ほどのクエリーの数なのだけれど、プラグインをいくつか入れるとあっという間に100を超えてしまう。

Nucleus は、その設計思想から、軽さが売りである。ところが、利用の仕方によってはその設計思想が逆に災いして、重くなってしまうことが多々ある。こういったことの対策としては、NP_Cache・NP_EzCache・NP_znItemCacheなどのキャッシュ系プラグイン(それぞれ、Radekさん、Andyさん、佐藤(な)さん)を利用して軽くしてしまうのがとりあえずの対処方法といったところ。

根本的にこれを解決する試みとしては、コアでSQLクエリーの結果をキャッシュしてしまおうという方法(hsurさん)や、スキンそのものをPHPで完全に書き換えてしまう方法(ZAPAさん)が報告されている。こういったことを参考に、今後自分としてNucleusとどのように向き合ってゆけばいいのか考えるため、Nucleusの長所と短所を、思いつくままにピックアップしてみた。

Nucleus 3.31 SHA-encryption edition [Nucleus]

2007年12月15日

英語版 Nucleus 3.31 のパスワード認証機能を拡張し、ハッシュ値の計算に MD5 ではなくて、SHA512 もしくは、SHA1 を使うようにしたもの。アルファーバージョンなので、使用は評価のみに限定したい。

PHP のバージョンにより、MD5, SHA1, SHA512 を自動的に使い分ける仕様である。具体的には、PHP4.3.0 未満では MD5 を、4.3.0 以上 5.1.2 未満では SHA1 を、5.1.2 以上では、SHA512 を使うようにしてある。

また、先の記事で述べたように、ランダムな文字列を付加した後にハッシュ値を計算する機能を取り入れたので、たとえハッシュ値が洩れても、現在のところはパスワード解析はほとんど不可能。ここで使うランダム文字列(Salt)は、config.php で、$HASH_SALT として設定する。

以前のバージョンからのアップグレードにも配慮していて、アップグレードの瞬間にログインできなくなるどの不具合は無いはず。今までどおり使用していても、ユーザーはどこがどう変わったかまったく気が付かないはず。MD5 から SHA1/SHA512 への切り替えは、ログインの瞬間に行われる。

ダウンロードはこちらから。
<%media(20071216-nucleus331sha_a1.zip|Nucleus 3.31 SHA)%>

ブルートフォースアタックを防ぐために - 2 [Nucleus]

2007年12月4日

先の記事で書いたこととほぼ同様のことを、今のバージョンのNucleusで実現する方法を考えていたが、以外と簡単にできそう。

まず、確認しておかないといけないのは、現在の Nucleus (ver 3.3) では、パスワードの長さが40文字に制限されていること。これは、非常に長い文字列を用いれば、md5 コリジョン脆弱性を用いて、任意のハッシュ値を生み出すようなパスワードが作成できるかもしれないので、それを防ぐためである。

現在のコンピューターの性能だと、ランダムな40文字の文字列の可能性のすべてをブルートフォースで調べるのはほぼ不可能であろうから、キー長としてはこれでよかろう。

実装には、config.php を若干書き換えるだけである。コアの改造も、これ用のプラグインも要らないし、実装後のコアのバージョンアップも問題なく行える。これを実装することにより、SQLインジェクションでパスワード用のハッシュ値を盗み取るだけでは、ブルートフォースアタックはほとんど不可能になるはずだ。

ブルートフォースアタックを防ぐために [Nucleus]

2007年12月3日

現在のところNucleusは、パスワードをMD5ハッシュ値として保存している。平文ではなくハッシュを用いているのは、万一サーバの保存データが洩れた場合に、容易ににパスワードを類推できないようにするためである。

ところが、先の記事で述べたように、たとえMD5の様なハッシュ関数を用いても、PS3のような演算速度の速いコンピューターでパスワードをはじき出すことが容易になってきた。MD5の代わりにSHA1のような新しいアルゴリズムのハッシュを用いても、解決にはならない。

王道の解決方法は、長いパスワードを用いることである。100文字ほどの長さのパスワードを用い、SHA1のような最新もしくはそれに順ずるアルゴリズムでハッシュ化すれば、ブルートフォースでパスワードを求めることは、現在の技術ではほとんど不可能になる。

ところが、パスワードを100文字にすると、それを入力するのが面倒くさいばかりでなく、パスワードの内容まで忘れてしまうことは頻繁に起こりうるだろう。そこで、どうすればよいか対策を考えてみた。

NP_ProtectByMD5 アップデート [Nucleus]

2007年12月2日

NP_ProtectByMD5 ver 0.3.0を公開しました。

ver 0.2.5 からバージョンアップするメリットは、次のとおりです。

1.携帯電話から投稿できる。
2.スパム認証に失敗したときのエラーメッセージを設定できる。
3.ログを残すことが出来る。
<<前の記事   後の記事>>