毎秒1000リクエスト を捌く超高速CMS「adiary」
2010/06/19(土)adiary Ver2.13リリース情報
Ver2.12に対しバグ修正を行いました。
Ver2.12→Ver2.13の変更点
- コメント欄付近に埋込テキストをおけるようにしました。
- カテゴリリスト/月リストを「開いて表示」設定が無効になっていたので修正しました。
- 携帯表示のコメント欄関連の処理のおかしいところを修正しました。
- コメント投稿成功時に表示されるカレンダーが過去のものになることがあるバグを修正しました。
- メール投稿にて「Content-Transfer-Encoding: quoted-printable」に対応しました。
- Ver2.06以降の中間拡張子の許可機能で、標準の設定では test.php5.pdf などがアップロードできてしまう問題を修正しました。
- <$v.phone_kantan_disable=1> を設定すると、かんたんログインを無効にできるようにしました。(Request by asano)
- 1度に2通以上のメールがたまった状態でpopからのメール投稿が行われると、月別リスト表示が通常と異なるバグを修正しました。(Thanks to ひとぅ)
Ver2.13aの変更点
- IE8で日記の編集画面やコメント投稿画面の表示がおかしい問題の修正しました。*1
既に Ver2.13 をお使いの方は次のパッチを落として theme/adiar.js と入れ替えてください。
Version2.00(β含む)以降からの乗り換え
- そのまま上書きしてください。
- Ver2.11以前の場合、uploader.conf.cgi をサンプルから再生成してください。*2
なおVer2.06よりアルバムシステム関連のJavaScriptの置き場が変更になっていますので、紛らわしい場合は theme/*.js を消してから上書きしてください。
Version1.44以前(C73/2.00α含む)以前からの乗り換え
Version2.00への移行処理を先に行ってください。
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非対応でリファラ送信なんて機種もあるそうですが、それは端末脆弱性なんで無視かな。
2010/04/24(土)adiary Version3 進捗状況メモ
Ver3のリリースが見えてきたのでこの記事の更新は停止しました。
特徴
リリーススケジュール(予定)
- β1 画像管理と完全なデザイン編集以外の機能。
- β2 アルバム機能(ファイル管理)の実装。
- β3 機能追加。修正。自動アップデート機能など。
- β4 本格的なデザイン編集機能。
- β5 adiary Ver2からの移行ツール。機能完成。
- β6 Markdown記法、スマホ画面の強化。全体の調整、修正。
- RC1 修正など。テーマ拡充。
- Ver3正式版(2015年夏を予定)
アップデート後の必要な処理を自動的に行う機能を内蔵したので移行したい人は移行しても構わないかも。それでも一応β版ということは心に留めておいてください。
HTML構造やプラグイン構造は互換性を失う変更は予定されていませので、テーマなりプラグインなり自由に作っていただけると大変たすかります。
テーマ開発・プラグイン開発で困ったらどんどん質問してください。また完成したテーマやプラグインはライセンスや動作に問題がなければβ版の段階でも本体収録されることがあります。
ネタメモ、積み残しメモ
- プラグイン関連
- cronイベント
- コメントのNGワード機能、ホスト指定のコメント非公開機能
- テキスト画像化プラグイン
- コンテンツのパンくずリスト
- adiaryのデモ動画
頂いた要望
- サイトマップ生成機能(プラグインで誰か作ってほしいな)
- グループウェア機能
- ユーザー毎に記事の既読・未読が設定できて、スケジュールの管理ができるくらいの。
2009/12/16(水)adiary Ver2.12リリース情報
Ver2.11に対しバグ修正を行いました。変更点を参照の上、必要ならばバージョンアップしてください。
Ver2.11→Ver2.12の変更点
- テーマディレクトリを変更すると「印刷用の表示」がリンク切れになるバグを修正。
- クラス追加。div.hatena-body0, a.adiary, li.to-album (_frame.html/_sidebar.html)
- 浅野さんご指摘&パッチ(感謝)。
- アルバムのサムネイルビューでサムネイル上にマウスカーソルを置いたときにポップアップする情報が実際のファイルと一致しないバグを修正。
- アルバムのスライドショーでファイルを選択したときに左上に表示されるファイル名とバイト数が実際のファイルと一致しないバグを修正。
- アルバムで「すべて選択」「選択を解除」ボタンをクリックしても正常に動作しないバグを修正。
- 携帯画面でのコメント表示がエラーになることがある不具合を修正。
- スーパーpre記法中等に行頭にスペースが1つ入る仕様を変更したことによる、バグ混入の問題を修正。*1
- aa記法が効かないバグを修正。
- テーマ選択時に下フレームで表示される画面のHTML(スケルトン)が正しくなかった問題を修正。
- テーマによって、「日記の削除/コメント・トラックバックの編集画面」でコメント・トラックバック件数部分の表示がおかしくなる不具合を修正。
- Ver2.06以降、アップローダーで中間拡張子チェックで"adiary-1.00.tgz"などが跳ねられてしまう問題を解決するため、数字など特定の文字を含む拡張子を許可する機能をつけました。*2
- アップローダーで0byteのファイルをアップロードできるようにしました。*3
Version2.00(β含む)以降からの乗り換え
- そのまま上書きしてください。
- Ver2.11以前の場合、uploader.conf.cgi をサンプルから再生成してください。
なおVer2.06よりアルバムシステム関連のJavaScriptの置き場が変更になっていますので、紛らわしい場合は theme/*.js を消してから上書きしてください。
Version1.44以前(C73/2.00α含む)以前からの乗り換え
Version2.00への移行処理を先に行ってください。
2009/11/23(月)adiary Ver2.11リリース情報
Ver2.09に対し、細かな機能変更とバグ修正を行いました。
Ver2.09→Ver2.11の変更点
- 擬似データベース(pseudo DB)使用時、wikiコンテンツを開こうとするとDB速度が著しく低下する問題を修正しました。擬似データベース使用者は「管理」→「システム管理」→「管理者メニュー」→「Version 2.09以前 → Version 2.10以降へのアップグレード」を実行してください。擬似データベース以外は実行できません。
- アルバムにソートの機能が付きました。
- 一部テーマファイルのCSS修正。
- 静的出力時に埋め込みテキストを出力しないオプションを追加。
- MySQLにて記事テキスト本文に64KBまでしか保存できない問題を修正しました。(新規に作成した日記帳のみ有効)*1([ml:users:356:Thanks to ひとぅ])
- rss10.html, rss10short.html, rss20short.html でRSSが生成できないバグを修正しました。([ml:users:361:Thanks to 小沼])
- 次のような記述ができないコンパイラのバグを改善しました。
<$ifexec(index(ENV.HTTP_USER_AGENT, 'iPhone')>=0, begin)>
- adiaryスーパーpre記法に行頭にスペースが1つ入ることがある仕様を改善しました。(Thanks to nblog)
- theme?xxx/xxx といったページ表示時にそのページを検索対象外にするmetaタグを出力するようにしました。
- 月別リストの古い年を折りたたむようにしました。(Thanks to G)*2
- C74で配布したbigblueを収録しました。
- C76で配布したyuuテーマを収録しました。
- 【携帯】コメントの表示件数を10件ごとにしました。
なお、[ml:users:0369:メーリングリストにある]のようなiPhone専用テーマを作成したいときは次のような細工をしてください。(関連URL)*3
<$ifexec(Is_mobile, begin)> <$v.template_dir = "<@theme_dir>satsuki-mobile/"> <$v.theme = 'satsuki-mobile')> <$end>
の後ろで
<$ifexec(0 <= index(ENV.HTTP_USER_AGENT, 'iPhone'), begin)> <$v.template_dir = "<@theme_dir>satsuki-mobile/"> <$v.theme = 'iphone'> <$Is_mobile=1> <$end>
Ver2.11β1からの変更ファイル
- diary.skel/format/month_list.html
- lib/Satsuki/Diary.pm
Version2.00(β含む)以降からの乗り換え
- そのまま上書きしてください。
- Ver2.05以前の場合、uploader.conf.cgi をサンプルから再生成してください。
なおVer2.06よりアルバムシステム関連のJavaScriptの置き場が変更になっていますので、紛らわしい場合は theme/*.js を消してから上書きしてください。
Version1.44以前(C73/2.00α含む)以前からの乗り換え
Version2.00への移行処理を先に行ってください。