Security

itemをevalするのはまずいかも

2008年6月25日

久々の更新。

先日、とあるPHPの本を読んで知ったのだが、HTMLへのPHPコードの挿入は、<?php ... ?>以外に、<script language="php">...</script>でもできる。PHP5でもこれを確認した(PHP6ではどうだか知らない)。

現在のバージョンでは、それぞれのアイテムのパースにもevalを使っている。admin以外でのPHPコードの実行を回避するために、『<?』を『&lt;?』に変換しているが、これだけでは穴があるということになる。

改めて、ブラックリスト形式でのセキュリティー対策が怖いことを思い知らされた。ここの部分の実装を再考せねばならない。ここの対策は、前から気になっていたところではある。

1)いっそのこと、メンバーは一人だけ(superadmin)にする

2)superadmin以外の記事はすべてhtmlspecialcharsし、ホワイトリスト形式で、許されたタグだけ元のタグに戻す

3)superadmin以外の記事はすべてhtmlspecialcharsし、別途BBcodeなどをコアでサポートする

などの対策が考えられる。このツールの開発を始めた当初は1)も考えたが、多分この方法は取らない。Nucleusにおける複数メンバーでの使用の利便性を考えると、superadmin以外はすべてhtmlspecialcharsにしてでも複数メンバーに対応したほうがよさそう。

ならば、2)か3)だが、多分コアでは2)をサポートすることになると思う。とりあえず、正規表現を考えてみる。

どちらの方法を使うにせよ、htmlspecialcharsの後『&lt;%』を『<%』に戻してからevalし、最後にタグに変換するのがよさそう。そのため、『<%』ではPHPコードが実行されないサーバ設定であることを確認するルーチンを入れる必要がある(もっとも、そうなっていないとほとんどのスキン変数でエラーが出るのだけれど)。

コメント

コメントはありません

コメント送信