2 posts tagged “nucleus”
v3.24 の日本語版がリリースされた.英語版から一週間足らずのリリースとなる.素晴らしい :D
以前の版には、複数ユーザで使用してる場合、クロスサイトスクリプティングの脆弱性があります。
とのこと.あぁ,前エントリでの「管理画面では悪意のある入力は行われないはず」という認識はヌルかったのだなぁ.
# 諸事情あって nucleus の公開運用に踏み切れないので,それまで Vox にて代用しよう :)
PS3 の発売と同日に neucleus 3.24 英語版が公開された.
3.23 からの修正点は 5 個所で,該当ファイルは ADMIN.php と SKIN.php のみ.ADMIN.php は (名称の通り) 管理画面に関するものなので,基本的には (セッションハイジャックや CSRF 等の攻撃を受けない限り) 悪意のある入力は行われないはずだが,上記エントリを読むに,おそらくグローバル設定の「ビジターにメンバーアカウント作成を許可する」を「はい」に設定 している場合に外部から呼び出されることがあるのだと思う (「はい」にして運用したことがないのでよく分からない).
ADMIN.php の変更点は以下の通り.
- メンバを編集する際に,入力された「表示名」,「本名」,「備考」からタグ文字列が削除されるようになった.
- メンバ一覧表示時に「Web サイト (URL)」の項目がエスケープされるようになった.
- パスワード変更に関する不要なコードが削除された.
- 管理画面下部の copyright 表示方法が変更された.
1 に関しては,表示時には適切にエスケープされているようなので意図がよく分からない (他の項目と処理を合わせた?).更に,処理が適用されているのはメンバ編集の時だけで,メンバ追加の際には削除されない (なぜ編集時だけ?).2 は XSS 対応 (*後述) で,3 と 4 は特筆するまでもないと思う.
SKIN.php の変更点は以下の通り.
- スキン変数 blogsetting/member の表示時にエスケープされるようになった (全ての引数に対して適用).
こちらも XSS 対応だと思うが,ADMIN.php/SKIN.php 共にエスケープ処理として
echo htmlspecialchars($str);
という手続きを行っている.htmlspecialchars のデフォルト quote_style は ENT_COMPAT なので,このままだとシングルクォーテーション記号がエスケープされない.ここは
echo htmlspecialchars($str, ENT_QUOTES);
としないと,スキン変数が HTML 属性内でシングルクォートされている場合に XSS 攻撃を許してしまうだろう.
いっそのこと,htmlspecialchars は以下の関数を定義して全て置き換えてしまいたい.
function h($str)
{
return htmlspecialchars($str, ENT_QUOTES);
}
というか,PHP Web アプリケーションを書き始める時はまずこの関数から書き始めるとか,いっそのこと htmlspecialchars のデフォルト第二引数を ENT_QUOTES になるよう PHP をリコンパイルするとか (無理).
とはいっても,nucleus (に限らず多くの PHP Web アプリケーション) では第二引数なしの htmlspecialchars 呼び出しが濫用されているのだし,抜本的に改善するのは難しいだろう.書きながらちょっと絶望的な気分に浸ってみたり :P
まぁ,nucleus のような Web アプリケーションが受け得る XSS 攻撃といえば
- 悪意あるリンク等から nucleus サイトに遷移した (させられた) 際に,サイトが意図せぬ表示内容になる可能性がある.
- 悪意あるリンク等から nucleus サイトに遷移した (させられた) 際に,攻撃者に管理画面を乗っ取られる可能性がある.