まだ重たいCMSをお使いですか?
毎秒1000リクエスト を捌く超高速CMS「adiary

2010/08/14(土)adiary C78 Special Edition

adiary C78 Special Editionがコミックマーケット78にて配布されます。

c78-cdr.jpg

8/14(土) 「東3ホール ア38b」 頒価100円

参加団体であるadiaryユーザ会のえらい人が多忙のため、代わりに内容を書いておきます。

  • すべての価値の9割を占める限定テーマはいつものテーマのえらい人ががんばっています。応援してあげてください(笑)
  • レーベルは絵師様現実逃避多忙のためでっちあげ、ポストカードはありません(苦笑)

Special Editon機能

  • twitterのウィジェットを手軽に貼れる機能
  • 日記更新時、twitterに自動的に更新情報を通知・発言する機能。

購入者の方へ

パッチが出ています。

2010/08/12(木)Digest::SHA を使って HMAC-SHA1 を生成するPerlのコード

Digest::SHA ないしは Digest::SHA::PurePerl を使います。よって PurePerl でも動作します。

HMAC署名についてはwikipediaを参照

sub hmac_sha1 {
	# my $self = shift;
	my ($key, $msg) = @_;
	my $sha1;

	if ($Digest::SHA::PurePerl::VERSION) {
		$sha1 = Digest::SHA::PurePerl->new(1);
	} else {
		eval {
			require Digest::SHA;
			$sha1 = Digest::SHA->new;
		};
		if ($@) {
			require Digest::SHA::PurePerl;
			$sha1 = Digest::SHA::PurePerl->new(1);
		}
	}

	my $bs = 64;
	if (length($key) > $bs) {
		$key = $sha1->add($key)->digest;
		$sha1->reset;
	}
	my $k_opad = $key ^ ("\x5c" x $bs);
	my $k_ipad = $key ^ ("\x36" x $bs);
	$sha1->add($k_ipad);
	$sha1->add($msg);
	my $hk_ipad = $sha1->digest;
	$sha1->reset;
	$sha1->add($k_opad, $hk_ipad);

	my $b64d = $sha1->b64digest;
	$b64d = substr($b64d.'====', 0, ((length($b64d)+3)>>2)<<2);
	return $b64d;
}

最後に「====」を付けてやるのがポイントで、これがないとOAuthで盛大にコケます。

なおこのソースコードはPDS扱いとします。

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 と入れ替えてください。

*1 : IE8のtextareaバグ対策で仕込んだ「position:abosolute」が、IE8側のアップデートで修正されらしく、今度は逆に悪影響していたため削除しました。本当に迷惑極まりないブラウザです……

Version2.00(β含む)以降からの乗り換え

  • そのまま上書きしてください。
  • Ver2.11以前の場合、uploader.conf.cgi をサンプルから再生成してください。*2

なおVer2.06よりアルバムシステム関連のJavaScriptの置き場が変更になっていますので、紛らわしい場合は theme/*.js を消してから上書きしてください。

アップデート方法の参考情報。

*2 : もしくは<$v.allow_ex_match_except = '^[A-Za-z]+\d+$'>の設定を追加してください。

Version1.44以前(C73/2.00α含む)以前からの乗り換え

Version2.00への移行処理を先に行ってください。

2010/04/28(水)[adiary2] かんたんログイン認証の脆弱性対策

今はかんたんログイン脆弱性がブームなようです。今更何言ってるんだという感じですが、一応adiary内部でどのようにかんたんアクセスを処理しているか書いておきます。

かんたんログインとは

携帯の機種固有IDを使用した自動ログイン機能のことです。Cookieを実装する気のない某殿様商売通信キャリアの存在が一気に利用を広げました。

機種固有IDは、USER-AGENTなどのHTTPヘッダによって送信されます。HTTPについて知っている人ならすぐわかることですが、このヘッダは誰でも簡単に任意の値で送信することができるため何のセキュリティにもなりません。例えるなら、掲示板に書き込む際の名前欄で承認しているようなものです。しかも比較的単純な通し番号なので、秘匿性もあったものではありません。*1

*1 : ほかにどこのサイトにも同じものが送られるといった理由があります。

adiaryの実装

kantan.png

もともとこんな危険なものを実装する気はなかったのですが(苦笑)、要望があったのでしぶしぶ実装しました。

右の画面がかんたんログインの実際の画面です*2。このページをブックマークしてもらい「かんたんログイン」をクリックしてもらうことでログインできます。


ID:useridの人がかんたんログインを設定したこの画面のURLは次のようになります。

http://~/adiary.cgi/=userid:LE0GdeSwSdQ/?login_docomo

LE0GdeSwSdQという文字列は「機種固有IDから生成されるハッシュ」です。adiary.conf.cgiの中の

<$Secret_phrase = '秘密の言葉'>

の設定が漏洩しない限りハッシュ文字列を第3者が知ることはできません。

仮にこのログインURLだけ漏洩しても、対応する機種固有IDが分からないとログインできません。ですので、いわゆるかんたんログイン脆弱性はadiaryには存在しないことが分かります。

*2 : この画面はDoCoMoの場合。リンクに utn が埋め込まれており機種固有IDの送信を要求している。

しかし別の問題が……

次は携帯ログイン後のURLです。

http://~/adiary.cgi/=userid=kpQYloloFFF0M4Xnujjs/?login_docomo

「kpQYloloFFF0M4Xnujjs」がセッションIDになります。Cookieが使えないので仕方なくURLに埋め込んでいるのですが、リファラーからこのURLが漏れるとセッションが乗っ取られてしまいます。

ドコモはリファラを送らないことになっているみたいですが、他機種だと色々で頭の痛い問題です。

(参考)携帯電話向けWebアプリケーションのセッション管理手法

とりあえず

Cookieを食わせて、食べられたらそっちに誘導するように変更するか……。Cookie非対応でリファラ送信なんて機種もあるそうですが、それは端末脆弱性なんで無視かな。

2010/04/24(土)adiary Version3 進捗状況メモ

Ver3のリリースが見えてきたのでこの記事の更新は停止しました。

特徴

  • HTML5採用の本格的なブログ/CMSツール。
  • 分かりやすく扱いやすい。
  • PurePerlで動作し*1、外部DBが不要*2
  • プラグインとテーマによる柔軟な拡張性。

*1 : Perl 5.8以降であればレンタルサーバ等でも動作します。サポートしませんがWindows + Apacheでも現状動作します。

*2 : 外部のRDBMSを使うこともできる。MySQL, PostgreSQL両対応。

リリーススケジュール(予定)

アップデート後の必要な処理を自動的に行う機能を内蔵したので移行したい人は移行しても構わないかも。それでも一応β版ということは心に留めておいてください。

HTML構造やプラグイン構造は互換性を失う変更は予定されていませので、テーマなりプラグインなり自由に作っていただけると大変たすかります。

テーマ開発・プラグイン開発で困ったらどんどん質問してください。また完成したテーマやプラグインはライセンスや動作に問題がなければβ版の段階でも本体収録されることがあります。

ネタメモ、積み残しメモ 2015/03/03

  • プラグイン関連
    • cronイベント
    • コメントのNGワード機能、ホスト指定のコメント非公開機能
    • テキスト画像化プラグイン
    • コンテンツのパンくずリスト
  • adiaryのデモ動画

頂いた要望

  • サイトマップ生成機能(プラグインで誰か作ってほしいな)
  • グループウェア機能
    • ユーザー毎に記事の既読・未読が設定できて、スケジュールの管理ができるくらいの。