日記
trac拡張のセキュリティEdit

Blogマクロのソースをちらっとながめていたんだけど、pythonって、

blogPattern = blogPattern.strip()
sql = "SELECT DISTINCT name from wiki where name like '%s' order by time desc" % blogPattern

なんて感じで、Prepared SQLみたいなことができるのかな? それとも単なるsprintf(エスケープなし)かな? 多分「%」って演算子で%sのところにblogPatternが埋め込まれているんだよね。stripは単なるtrimみたいだし。*1

Blogマクロに限らないんだけど、tracの拡張全般に関して、セキュリティ的にどうなっているんだろう? 上記のような処理だと、ふつうに考えればマクロの呼び出し側でいろいろできちゃいそうだよね。

tracレベル、あるいはpythonライブラリレベルで何か対応されているのかな?(ある程度のセキュアさが保たれる仕組みを持っているとか) あるいはDB(sqlite)レイヤーで何か対応されている?(コアのテーブルとは権限が分離してあるか、あるいはsqliteのSQL文法仕様的にできることが限られているとか)

単純に拡張のソースを見て、そこで対策を何もしてなさそうならばイントラ向けだ(公開して使うな)と考えるべきなのかなー。

*1 やっぱりsprintf相当だった。http://www.python.jp/doc/release/lib/typesseq-strings.html

Published At2006-02-14 00:00Updated At2006-02-14 00:00