毎秒1000リクエスト を捌く超高速CMS「adiary」
2010/08/17(火)adiary V2.09~とIE8での組み合わせでテキストエリア不具合
問題と修正方法
IE8を使用時、日記の編集画面やコメント投稿画面の表示がおかしい(textareaが後続の要素にかぶる)問題を修正しました。
Ver2.09~Ver2.13(Ver2.20C78SEの方はこちらを参照)をお使いの方は次のパッチを落としtheme/adiar.js と入れ替えてください。
- http://adiary.org/download/patch/adiary.js (2010/08/17 21:43ファイル差し替え)
※お手数ですが差し替え前にDLした方は再度DLしてください。
問題の詳細
IE8にはテキストエリアで文字を入力すると1文字入力ごとにエリア内が変にスクロールするという意味不明なバグがありました。そのバグに対するハックとして position:aboslute を指定する技があったのですが、いつの間にかIE8のtextareaバグが修正されたのか仕様が変わったのか、「position:abosolute」がそのまま正しく解釈されるようになっていました。
したがって、きちんとWindows UpdateされているIE8ではtextareaが「position:abosolute」となり後継の要素が上書きされてしまいます。
そのため、このハック自体を無効にしました。
2010/04/28(水)[adiary2] かんたんログイン認証の脆弱性対策
今はかんたんログイン脆弱性がブームなようです。今更何言ってるんだという感じですが、一応adiary内部でどのようにかんたんアクセスを処理しているか書いておきます。
かんたんログインとは
携帯の機種固有IDを使用した自動ログイン機能のことです。Cookieを実装する気のない某殿様商売通信キャリアの存在が一気に利用を広げました。
機種固有IDは、USER-AGENTなどのHTTPヘッダによって送信されます。HTTPについて知っている人ならすぐわかることですが、このヘッダは誰でも簡単に任意の値で送信することができるため何のセキュリティにもなりません。例えるなら、掲示板に書き込む際の名前欄で承認しているようなものです。しかも比較的単純な通し番号なので、秘匿性もあったものではありません。*1
adiaryの実装
もともとこんな危険なものを実装する気はなかったのですが(苦笑)、要望があったのでしぶしぶ実装しました。
右の画面がかんたんログインの実際の画面です*2。このページをブックマークしてもらい「かんたんログイン」をクリックしてもらうことでログインできます。
ID:useridの人がかんたんログインを設定したこの画面のURLは次のようになります。
http://~/adiary.cgi/=userid:LE0GdeSwSdQ/?login_docomo
LE0GdeSwSdQという文字列は「機種固有IDから生成されるハッシュ」です。adiary.conf.cgiの中の
<$Secret_phrase = '秘密の言葉'>
の設定が漏洩しない限りハッシュ文字列を第3者が知ることはできません。
仮にこのログインURLだけ漏洩しても、対応する機種固有IDが分からないとログインできません。ですので、いわゆるかんたんログイン脆弱性はadiaryには存在しないことが分かります。
しかし別の問題が……
次は携帯ログイン後のURLです。
http://~/adiary.cgi/=userid=kpQYloloFFF0M4Xnujjs/?login_docomo
「kpQYloloFFF0M4Xnujjs」がセッションIDになります。Cookieが使えないので仕方なくURLに埋め込んでいるのですが、リファラーからこのURLが漏れるとセッションが乗っ取られてしまいます。
ドコモはリファラを送らないことになっているみたいですが、他機種だと色々で頭の痛い問題です。
(参考)携帯電話向けWebアプリケーションのセッション管理手法
とりあえず
Cookieを食わせて、食べられたらそっちに誘導するように変更するか……。Cookie非対応でリファラ送信なんて機種もあるそうですが、それは端末脆弱性なんで無視かな。
2009/06/28(日)adiary セキュリティアナウンス
adiary Ver1.992~Ver2.08を第3者にレンタルしている場合、セキュリティ上重大な欠陥がありますので、直ちに以下の差分を適用してください。
adiaryを設置者個人で利用している場合はこの問題の影響を受けません。
問題の詳細
本来なら許可されない埋め込みテキストへのJavaScript等の記述が、トラストモードの設定に関わらず常に許可されていました。これは開発時のデバッグコードが、開発完了後もそのまま残り続けたことが原因です。
第3者にJavaScriptの埋め込みを可能とすることでセッションCookieの盗聴が可能になり、これによりadiaryを利用する他のアカウントをセッションハイジャックされる危険性があります。
修正の詳細
■修正前 $tag_escape->{allow_anytag} = 1; #$self->{trust_mode}; ■修正後 $tag_escape->{allow_anytag} = $self->{trust_mode};
2009/04/22(水)IE + UTF-8版での問題 (adiary Ver2.06)
adiary 2.06のUTF-8版使用時、IEでJavaScriptエラーが起こります。
JavaScript文字コードとHTML文字コードの一致させないと問題が起こるIEが原因です。念のため次のファイルの文字コードを UTF-8 に置き換えてください。
theme/resizeform.js
文字コード変換がよくわからないという人は、以下のファイルを解凍して上書きしてください。
2008/12/26(金)adiary Ver2.01~2.03のサムネイルバグ
adiary Ver2.01から2.03で標準付属した設定ファイルにミスがあり、その設定ファイルを使用した場合、サムネイルを記事に貼り付けると正しいリンクが作成されない不具合があります。
ファイル名 : uploader.conf.cgi
(修正前)120行目付近 <$v.upload_tag_thumbnail = "[image#small:%i:%d:%f:%f]"> (修正後) <$v.upload_tag_thumbnail = "[image:%i:%d:%f:small:%f]">
心当たりのある方は、現在使用中の uploader.conf.cgi のファイルをご確認ください。
ずいぶん前にご指摘いただいていたのですが、確認が遅れたために報告が遅れましたことをお詫び申し上げます。
追伸
もうすぐ Ver2.04 をリリースします。