もうliveアカウントのログイン時には自動補完が効くようになったので、以下の内容は半分無意味
ただし複数アカウントを保存している場合、候補がうまく表示されないので使い続けている(Firefox, 2016/04/20)
■Firefox付属のパスワードマネージャの仕様
■live.jpでのID候補表示の現況
以下は古い情報
MicrosoftのWebサービス(Live, Outlook, OneDriveなど)のログイン時、マスターパスワードを入力するだけでメールアドレスとパスワードが自動補完されるGreasemonkeyスクリプトを作ってみた。
今どきのブラウザはドメイン毎にパスワードを保存でき、ログイン画面で自動的に補完される。覚えきれないという理由でどのサイトでも共通の簡単なパスワードを使うよりは、ブラウザに任せて全て別々の複雑なパスを設定しておいた方が安全、というのが通説である。
ブラウザにパスワードを記憶させることの問題は、他人にPCを使われたら丸見えということだが、その点はマスターパスワード機能を使えばよい。ブラウザ起動時にマスターパスワードを尋ねられ、入力しないとパスワードの自動補完が行われない。
MicrosoftのWebサービスのログイン画面では、パスワードを登録していても自動補完が行われない。これは「パスワードをブラウザに保存しておいたら危険だよ」という思想に基づき、敢えて自動補完を行わせないようにしているためだと思われる。だが、致命的なデータを預けているわけでもないアカウントにアクセスする度に入力を求められるのは、正直なところ手間である。
よくあるのは、入力欄に「autocomplete=“off”」の属性を持たせることで、ブラウザに「この入力欄は自動補完しないでね」と伝える方法である。大抵のブラウザは素直に「はいはいわかりました」と自動補完を行わなくなるが、ブラウザの設定でメッセージを無視して強制的に自動補完させることも可能である。また、ユーザースクリプトなどで「autocomplete=“on”」に書き換えてしまうという方法もある。
だがMicrosoftはそう簡単ではないようで、何故か分からないがいろいろ試しても自動補完が行われない。Firefox付属のパスワードマネージャとは別の、KeeFoxなどのパスワード管理アドオンを使用しても入力欄は空白のままだった。
仕方ないのでログイン画面にマスターパスワード入力欄を(勝手に)設置し、それを共通鍵として、あらかじめ暗号化しておいたメールアドレスとパスワードを復号してそれぞれの入力欄に補完する方法をとってみる。
Firefoxのマスターパスワードを起動時に入力していても、関係なく常にMicrosoftのログイン画面で入力しなければならないという手間は生じるが、それでも毎回メールアドレスとパスワードを入力する手間よりはましだと考えよう。Firefoxのマスターパスワードの認証が現在有効かどうか、スクリプトから読み取れればその手間も省けるのだが、やり方が分からない。
暗号化したパスワードを直接スクリプトに書くことになるが、AESはパスを8~9文字以上に設定すればそこそこ強力な暗号なので大丈夫でしょう。
google codeさんとこのcrypto-jsを利用している。あまり綺麗なコードではないので参考程度に。
Greasemonkeyにインストールする方法。
上のソースをとりあえずメモ帳にコピー。
下の暗号化フォームに「マスターパス」「メール」「パスワード」を入力して暗号化。変換された「暗号化後メール」「暗号化後パスワード」をソースの「ここにAES 256bitで暗号化したメールアドレス/パスワードを記入」のところにそれぞれ記入。
Greasemonkeyのアイコンの▼をクリック、「ユーザスクリプト新規作成」し、以下の内容を入力し、OK。
名前 | Masterpass for Microsoft |
名前空間 | http://www36.atpages.jp/~ikatakos |
実行するページ | https://login.live.com/login.srf* |
出てきたエディタの内容を消して、メモ帳の中身を全部コピー。保存。
Microsoftのログイン画面を再読込するとメールアドレス入力欄の上にマスターパスワード入力欄が作られるので、そこにマスターパスワードを入力してエンター。
AES 256bitで暗号化するフォーム。javascriptを使って変換しているだけなので、特に暗号化ボタンをクリックしたからといってパスワードなどがどこかに送信されることはない。 <html> <style>#encrypt-form input[type=“text”]{width:300px;}</style> <script src=“http://crypto-js.googlecode.com/svn/tags/3.1/build/rollups/aes.js”></script> <script> (function($){
})(jQuery); var exeEncrypt = function(){
var $ = jQuery; var $form = $("#encrypt-form"); $form.find("#enclogin").val(CryptoJS.AES.encrypt($form.find("#login").val(), $form.find("#masterpasswd").val())); $form.find("#encpasswd").val(CryptoJS.AES.encrypt($form.find("#passwd").val(), $form.find("#masterpasswd").val()));
}; </script>
<table> <tr><td>マスターパス:</td><td><input type=“password” id=“masterpasswd”></td></tr> <tr><td>メール:</td><td><input type=“text” id=“login”></td></tr> <tr><td>パスワード:</td><td><input type=“password” id=“passwd”></td></tr> <tr><td colspan=“2”><input type=“button” value=“暗号化” onclick=“exeEncrypt();”></td></tr> <tr><td>暗号化後メール:</td><td><input type=“text” id=“enclogin”onfocus=“this.select()”></td></tr> <tr><td>暗号化後パスワード:</td><td><input type=“text” id=“encpasswd”onfocus=“this.select()”></td></tr> </table>
</html>