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

2011/05/25(水)enterでフォ-ム内容を送信させない細工

JavaScript

//-----------------------------------------------------------------------------
// ●enterで送信させない
//-----------------------------------------------------------------------------
// Tested : Fx4, GC, IE7/8
function enter_not_submit(evt) {
	evt = evt ? evt : event;
	var e = evt.target || evt.srcElement;
	if (e.tagName != 'INPUT') return true;
	if (evt.keyCode == 13) return false;
	return true;
}

フォーム側

<form action="" method="POST" onkeypress="return enter_not_submit(event);">
	(フォーム内容)
</form>

Formに仕込むだけです。INPUTタグやSubmitボタンの細工は不要。

全INPUT要素を探し出してイベントを登録するハンドラのような無駄な処理も不要。

2011/02/07(月)さくらのレンタルサーバでメールパスワードに記号が使えない件のまとめ

「さくらのレンタルサーバ」等で、1年~半年ぐらい前は使用できた「@,$,%,!」といった記号がメールパスワードとして使えなくなってました。セキュリティを低下させる仕様変更が信じられないので、それ関連の情報まとめ。

使用できる文字の制限

気づかなかったのですが「Q:パスワードとして設定できる文字は何ですか?」に詳細がありまして、半角英数を除くと

+ - * / = . , _

たったこれだけの記号しか使用できません。

第一、不便とかそういう問題じゃないし、サーバやネットで極めて重要なセキュリティ低下を招くことになるのですが……。

なぜ使えなくなったのか?

セキュリティを低下させて平気でいるさくらインターネットが技術者として信用ならないので問い合せてみました。

お客様にはご不便をおかけする事となり申し訳ございません。[@,$,%,!]等の特殊記号につきましては、サーバ上で誤動作を招く可能性がございます事から、パスワードには使用できない文字といたしておりました。

しかしながら、一部のプランのメールアドレス作成画面においては、これらの文字もパスワードとして設定可能であった事が判明し、現在は本来使用可能であるとご案内いたしておりました記号文字のみが利用可能となっております。

つまり、

  • 本来は使用できなはずだったのに、バグで使用可能になっていた。
  • そのバグを修正したので、今は使えなくなっている。

メールの文面からこの制限を解除する気はさらさらなさそうです

問題の本質

問い合わせ結果の文面をみるとさくらインターネットの本音が透けて見えます。

「@,$,%,!」というのは、UNIX*1のシェル上で特殊な意味をもつ記号になります。これらの文字に使用制限をかけるということは、パスワード変更プログラムはサーバ上でshellを呼び出し引数にパスワードを与えてますと宣言してるようなものです。

きちんとサニタイズされない文字列をシェルに与えることは大きな問題が起きますが、サニタイズ等のきちんとした処理を行なっていれば何も問題ありません。危険因子を排除するためにこれらの文字を使用できなくすることは分からないでもないですが、たかがメールのパスワードを保存するだけの比較的簡易な実装・検証のリスクを天秤にかけ、顧客メールアドレスのセキュリティ低下を差し出すというのはあまり理解したくはありません。

だって、どう考えたって「それらの文字列がキケン」なのではなくて「シェルを呼ぶことが危険」なだけでしょう。

*1 : さくらの場合FreeBSD

さくらレンタルサーバのメール仕様と考察

  • サーバOS FreeBSD
  • MTA courier
  • SMTP Auth(cram-md5) / APOP等使用可能

sshログイン可能なので見てみると /home 以下にユーザーアカウント(レンタルサーバアカウント)が羅列され、それぞれのアカウントの /home/account に MailBox/ が置かれています。ここに、作成したメールアカウント(@より左)がディレクトリごとに配置されています。

つまり account という契約のサーバの、useraというメールアドレス(usera@account.sakura.ne.jp)は、

$ cd /home/account/MailBox/usera/
$ ls -Al
-rw-r--r--  1 account  users   64 Feb  1 20:28 .mailpassword
drwx------  9 account  users  512 Feb  1 20:28 maildir

このような具合です。

APOPが利用可能なことからパスワードは平文で保存されているはずですが*2、.mailpassword ファイルはバイナリであり何かしら暗号化されて納められているようです。

このファイルを直接書き換えれば好きなパスワードを設定できると思ったのですが、暗号化方法が分からないので諦めました。

しかし、このファイルがユーザーレベルで書き換えられるということは「@,$,%,!」などの記号をWebアプリ上から制限してもあまり意味のないことではないかと思うのですが。


それにしても、国内サーバ業者の最大手がこれでいいんですかね……? 技術者の端くれとしては納得がいかない。

*2 : APOPの仕様

追記 2011/02/08

記号が使えないことによるセキュリティ低下についてどういう考えですかと問い合わせたら返事が来たのですが……

最長32文字なんだから十分だろボケ。もう問い合せてくんな。(超意訳)

その後 2014/12/02

知らぬ間に改善されてた。2011/11/17以前に改善されていた模様。

2010/12/20(月)adiary Ver2.21リリース情報

Ver2.13に機能追加しました。

ダウンロードはこちらから

Ver2.13→Ver2.21の変更点

  • 「管理」→「設定」→「twitter関連の設定」
    • 日記更新時に自動的にtwitterのTLへ更新情報を発言できるようになりました。
    • 設定画面からtwitterのブログパーツ(プロフィールウィジェット等)を簡単に貼り付けられるようになりました。
  • 過去のSEテーマ「adiary-tan, adiary-tan2, apedia-c72, bigblue, invent, tiyu, mashiro」のライセンスをGPLに変更しました。*1
  • 画像アルバムのフィルダの閉じたり開いたりの状態を保存するようにしました。*2
  • メール投稿時に、投稿者IDを紐付けて保存できるようになりました。複数人管理のブログ向けです。*3
  • メール投稿の登録を、記事書き込み権限のみでできるようにしました。
  • メール投稿時、書き込みパスワードが未設定ならば最初を空行にしなくても書き込めるようにしました。
  • twitterのツイートアイコンを日記帳の設定から表示できるようにしました。
  • はてなブックマークアイコンの埋め込みコードを新しくしました。
  • 自動リンク使用時に、長いURLを途中省略するようにしました。
  • fix等
    • 本文がからの記事がインポートできない問題を修正しました(Thanks to kaede)
    • テーマ変更がGoogle Chrome/Safariで動かない問題に対応。
    • フレームなしテーマ変更がテンプレートの切替時に起こるバグを修正。
    • インストール時。先にシングルモードを設定して、そのIDと違うIDを最初の管理者として登録したとき、リダイレクトの無限ループに陥る問題を修正。
    • UTF8版におけるuploaderのcharset指定が誤っていたので修正しました。(Thanks to Nit)
  • Google Chrom対策(Thanks to asano)
    • 日記の投稿画面で記法入力ボタンをクリックすると記事が投稿されてしまう問題。
    • Satsuki系のテーマで日記の投稿画面でテキストエリアの行頭にテキスト入力カーソルがあると、そのカーソルが見えなくなる問題を修正。

*1 : もちろん作者承諾の上で。

*2 : アルバムのフォルダリストの更新(画面左下)が必要です。

*3 : メールアドレスを1度削除し、再登録してください。

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

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

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

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

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

2010/08/18(水)Pure PerlでのOAuth実装メモ

adiaryに、twitter投稿のためのOAuthを実装したときのメモです。PurePerl動作。

OAuthモジュール(OAuth::Lite::Consumer)を使わずに実装したので、同じことをやりたい人には参考になるかと思います。*1

続きを読む

2010/08/17(火)adiary V2.09~とIE8での組み合わせでテキストエリア不具合

問題と修正方法

IE8を使用時、日記の編集画面やコメント投稿画面の表示がおかしい(textareaが後続の要素にかぶる)問題を修正しました。

Ver2.09~Ver2.13(Ver2.20C78SEの方はこちらを参照)をお使いの方は次のパッチを落としtheme/adiar.js と入れ替えてください。

※お手数ですが差し替え前にDLした方は再度DLしてください。

問題の詳細

IE8にはテキストエリアで文字を入力すると1文字入力ごとにエリア内が変にスクロールするという意味不明なバグがありました。そのバグに対するハックとして position:aboslute を指定する技があったのですが、いつの間にかIE8のtextareaバグが修正されたのか仕様が変わったのか、「position:abosolute」がそのまま正しく解釈されるようになっていました。

したがって、きちんとWindows UpdateされているIE8ではtextareaが「position:abosolute」となり後継の要素が上書きされてしまいます。

そのため、このハック自体を無効にしました。