Greasemonkey
Blog Hackers Conference 2005からかなり経ちました.遅ればせながら私もGreasemonkeyを使ってみようと思っています.そんなこんなで作ってみたのがログイン用のuser.jsです.BizGooという企業向けサイトへのログイン,ログアウトをサポートします.
// ==UserScript== // @name BizGooLoginOut // @namespace http://d.hatena.ne.jp/kdaiba/ // @description Login Logout BizGoo // @include http://biz2.goo.ne.jp/ssl.jsp // @include https://biz2.goo.ne.jp/html/theme/new00/totalmenu.jsp // ==/UserScript== function xpath(query){ var all; all = document.evaluate(query, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); return all.snapshotItem(0); } var cid, uid, pass, form, out; if (window.location.href == 'http://biz2.goo.ne.jp/ssl.jsp'){ cid = xpath("//input[@name='vcid']"); uid = xpath("//input[@name='vuid']"); pass = xpath("//input[@name='vpasswd']"); form = xpath("//form[@name='item']"); cid.value = '企業コード'; uid.value = 'ユーザID'; pass.value = 'パスワード'; form.submit(); }else{ out = xpath("//a[@onClick='sso_logout_all();']"); out.addEventListener('click', function(event){ alert('NOT EFFECT. Please close this window'); event.stopPropagation(); event.preventDefault(); }, true); }
if (window.location.href == 'http://biz2.goo.ne.jp/ssl.jsp'){
の部分が,ログイン時にアクセスしているURLです.この部分にアクセスすると,Greasemonkeyが企業コード,ユーザID,パスワードを設定し,サーバにデータを送信します.URLはhttpになっていますが,POSTする際にはhttpsを使っているので,セキュリティ的に問題ありません.もっとも,ユーザIDやパスワードを平文で書いてること自体が問題です.
out = xpath("//a[@onClick='sso_logout_all();']")
から始まる部分は,ログイン中に表示される「ログアウトボタン」を探している箇所です.ボタンをクリックした際のイベントを横取りし,標準のログアウト関数が動かないようにしています.これをやらないと,ログアウトボタンを押す→ログイン画面に戻る→Greasemonkeyがログイン処理→元通り,ってことになってしまいます.ログアウト処理では,サーバ側のセッション削除,クライアント側のクッキー削除を行なっているようなので,この対処はセキュリティ的に問題あります.でも,初めてだし,自分用のメモだから,いいかなと.JavaScriptを触ったのが久しぶりなので,色々思い出さないとやりたいことが中々できません.今後は,地道に色々なスクリプトを作っていきたいと思ってます.