Ajaxで今よみがえる(^^;;-->[クロスブラウザ技術 ]DHTMLサンプル集
古籏一浩さんとのはじめての共著 発売中-->『Ajax実践テクニック』 古籏一浩/高橋 登史朗 (著)秀和システム
配本予約開始-->『入門Ajax 増補改訂版 』 高橋 登史朗 (著)ソフトバンククリエイティブ ; ISBN: 4797336242
-- リスト --
【カテゴリー】 ActionScript ( 5 ) AIR ( 2 ) AjaSQL ( 10 ) Ajax ( 561 ) Arax ( 1 ) canvas ( 10 ) CSS ( 10 ) ( 5 ) DLNA ( 1 ) Dojo ( 17 ) DOM ( 45 ) ES4 ( 4 ) 反重力物質 ( 1 ) ffAdd-on ( 1 ) Flash ( 46 ) Flash Remoting ( 11 ) FTP ( 2 ) GAF ( 9 ) Google Maps ( 112 ) GPS ( 41 ) HTTPヘッダサンプル ( 9 ) Internet ( 1 ) IPv6 ( 1 ) 漫画 ( 1 ) Java ( 44 ) JavaScript ( 248 ) jKamo ( 8 ) jQchart ( 1 ) jQuery ( 106 ) jquery-ref ( 1 ) jsGadget ( 19 ) jslb_ ( 3 ) jslb_ajax ( 9 ) JSON ( 46 ) JSR223 ( 7 ) kjscmd ( 1 ) KNOPPIX ( 1 ) Linux ( 15 ) Mac ( 8 ) Memo ( 3 ) Microformats ( 2 ) Mini AJAX ( 2 ) MochiKit ( 2 ) mootools ( 3 ) Movable Type ( 57 ) MySQL ( 10 ) NewGameWeb ( 2 ) Nucleus ( 8 ) OpenAJAX ( 3 ) OpenDocument ( 1 ) OS ( 7 ) P2P ( 2 ) Perl ( 7 ) PHP ( 37 ) PostGIS ( 1 ) PostgreSQL ( 4 ) prototype.js ( 21 ) ROBOT ( 1 ) RSSリーダー ( 14 ) Ruby on Rails ( 7 ) Spry ( 6 ) SQLite ( 11 ) SQLiteWorker ( 2 ) ssh ( 1 ) SSI ( 2 ) SVG ( 15 ) TRON ( 1 ) Video ( 1 ) VML ( 1 ) Webサービス ( 96 ) widget ( 6 ) Wii ( 1 ) Wiki ( 1 ) Win ( 6 ) WSH ( 1 ) X01HT ( 29 ) XML ( 30 ) XOOPS ( 1 ) XQuery ( 2 ) XUL ( 4 ) Yahoo! UI ( 62 ) 日付入力用カレンダー ( 1 ) 『Ajax実践テクニック』 ( 1 ) 『入門 Ajax』 ( 42 ) WinTips ( 2 ) こりゃすごい ( 3 ) チューニング ( 21 ) ダイナミックロード関数 ( 7 ) リファレンス ( 13 ) ライブラリ ( 107 ) レーダー雨量表示 ( 1 ) ハード ( 20 ) ペンギン ( 2 ) ブラウザ ( 71 ) ブログでBBS ( 1 ) アクセスグラフ ( 3 ) イベント ( 1 ) カレンダーによる日付入力スクリプト ( 4 ) クロスブラウザ ( 11 ) クロスブラウザ関数 ( 7 ) スマートフォン ( 8 ) セキュリティ ( 106 ) ソフトイーサ ( 1 ) マッシュアップ ( 23 ) 暗号 ( 4 ) 映画 ( 47 ) 河川の水位グラフ ( 3 ) 回線 ( 2 ) 開発ツール ( 22 ) 牛久大仏 ( 8 ) 携帯 ( 118 ) 言語 ( 18 ) 故障 ( 2 ) 洪水警報システム ( 2 ) 今日のひと言 ( 5 ) 仕様 ( 55 ) 雑談 ( 219 ) 実装 ( 1 ) 書籍 ( 17 ) 親子ウインドウ有無の確認関数 ( 3 ) 新海誠 ( 3 )
【info】有料サポート(ベータ)限定 承り中 多忙につき、一時、新規受付停止 閉店中 /【JSサポート(仮称)】 

【費用】 とりあえず、言い値で承ります。ただし、できる範囲での限定受付です。込み具合等によりお受けできない場合がありますのであらかじめご了承ください。サポートにご納得いただけなければ料金は不要です。 逆に感動したら多くても構いません(^^;;;。

【できること】 たとえば、かも日記で無料配布されているコードのカスタマイズや、あるいは、JavaScript/Ajax全般+Webサーバーとの連携などのアドバイス&サンプル作成等 。A:jQchartなどでWeb用グラフ設置(エクセル→CSVやデータベースからWebグラフ生成)などのアドバイスやカスタマイズサンプル作成。B:ツリーメニューなどのカスタマイズサンプル。C:Google Mapsのカスタマイズ。etc...

【できないこと】 腕立て伏せ200回

【ライセンス】 私が今まで「かも日記」等で提供してきたコードの大半は、商用利用、改造、自由、連絡不要で、今後もそれらは変わりません。そして、この有料サポートによりカスタマイズコードなどが提供される場合でも、同様に、それらを商用利用しても改造しても自由です。ただし、制限のきついライブラリなどを使う場合は、各ライブラリのライセンスに準拠せざるを得ない場合があります。

【info】いつもいろいろなテストなどをページ内のあちこちでやっているので、重かったり、壊れていたりするf^^;ことも多いですが、何卒、ご了承ください ( _ _ b

2005年07月17日

【Ajax】Basic認証ページから読み込む

Ajax ブックマークに追加する ブックマーク-- Buzzurl  / Hatena  / Livedoor track feed


XMLHttpRequestオブジェクトのopenメソッド引数には、オプションで、省略可ですが、 ユーザー名とパスワードを入れられるようになっています。

そこで、とりあえず、Basic認証を試してみます。ま、しょせんBasic認証ですから、あまり安全じゃありませんが(^^;そこを理解した上で、便利には使えるかもしれません。

#Ajaxを使えばMD5などで自力で毎回コードを変更し、パスワードもネットワークに流さない、認証やセッションも可能だという気がして、こないだ考えた(頭いたくなりそうな^^;)ロジックがあるんですが、それはまた、閑なときに書いてみます。

【動作ブラウザ】
*Opera8とSafari1は、入力要求ダイアログがでてしまいました。。。
win mac linux
n7m1e6o7o8 n7m1e5s1 n7m1k3
× ×


name:「ajax」、password:「test」です(入力済み^^;;;)。
認証ページは、http://jsgt.org/ajax/ref/test/auth/basic2/auth/index.htm
name :
password:

ここへ出力します-->


<!-- Ajax簡易ライブラリ jslb_ajax.js ライブラリ更新情報:http://jsgt.org/mt/archives/01/000409.html --> <script languege = "JavaScript" src = "http://jsgt.org/ajax/ref/lib/jslb_ajax034.js" charset = "utf-8"></script> <script language = "JavaScript"> <!-- //コールバック関数 ( 受信時に実行されます ) function on_loaded426(oj) { //レスポンスを取得 var res = decodeURIComponent(oj.responseText) //レスポンスされた文字列を表示 echo426(res) } //出力 function echo426(msg) { document.getElementById('echo426div').innerHTML += msg + '<br>' } //--> </script> <body> <form name="auth"> name :<input name="name" type="text" value="ajax"><br> password:<input name="pwd" type="password" value="test"><br> <input type = "button" value = "認証ページのHTMLを読み込み、表示します" onclick = " sendRequest( on_loaded426, //コールバック関数 '', //data 'POST', //HTTPメソッド 'http://jsgt.org/ajax/ref/test/auth/basic2/auth/index.htm', //url true, //非同期 true, //強制ロード this.form.name.value, //ユーザー名 this.form.pwd.value //パスワード )"> </form> <hr> <!-- ここへ出力します --> <div id="echo426div"></div>

# ちなみに、高度な JavaScript 技集などのbase64エンコードを使わせてもらえば、open()メソッドの引数を使わなくても、自前でリクエストヘッダをセットすることで、認証可能です。

簡単に説明すると、ユーザー名とパスワードをコロン「:」でつないだ文字列をbase64でエンコードしてからsetRequestHeader()でAuthorizationヘッダをセットします。
//base64 Basic認証 var b64 = base64encode(user+':'+password) oj.setRequestHeader('Authorization',' Basic '+b64);

ヘッダを使って認証サンプル
http://jsgt.org/ajax/ref/test/auth/basic2/test21.htm

#厳密に言うと、サーバーが先に401などを返して、Basicの認証作業は、確か、そこから始まるわけですから、最初からパスワードを送るんではなくて、 statusコードの401や407を拾ってむにゃむにゃする方法があるような気もしています。。。どうでしょう? ←試してみたら、ダミーのsend後、401が返ってきた瞬間にブラウザがダイアログ出します(^^;;。でも、それよりも、passwordをつけて送出した時点で、最初から、リクエストに「Authorization」ヘッダをつけてくれるので、Ajaxの場合、通常のブラウザUIが行っているような無駄なダミーリクエストのやり取りは無いんですね。

参考: RFC2617 HTTP 認証: 基本アクセス認証及びダイジェストアクセス認証
http://www.studyinghttp.net/cgi-bin/rfc.cgi?2617

Basic認証ページを用意する

http の認証認定方式にはBASIC 認証がよく利用されています。しかし、通信経路でパケットを盗聴されると簡単にパスワードがばれてしまいます。もう少し、強度の強いものでは、Digest 認証 があります。こちらはMD5でパスワード自体は流れませんので多少安心です。でも、今回は、BASIC 認証です。Digest 認証は、またの機会に、、、。

[ パスワードファイルを作る ]
htpasswd で、たとえば、/home/myhome/というディレクトリへ「.htpasswd」というファイルを自動生成します。 このディレクトリは、安全のため、Webから直接アクセスできない場所にします。
/usr/bin/htpasswd -c /home/myhome/.htpasswd ajax
こう打つと、下記のように聞かれますのでパスワードを入れます。
New password:●●●● Re-type new password:●●●● Adding password for user ajax
これで、パスワードファイルはできあがりです。試しに、/home/myhome/.htpasswdを開いてみると、
ajax:QBFDL1cQxI2cQ
こんなデータが入っています。作成したこのパスワードファイルに、更に追加でユーザを登録したい場合には、 下記のように、-c オプションを付けずに実行します。
/usr/bin/htpasswd /home/myhome/.htpasswd ajax2


[ .htaccessを用意する ]
下記の内容を.htaccessという名前のファイルにして、認証したいディレクトリへ置きます。(httpd.confへ指定する方法もあります)
AuthUserFile /home/myhome/.htpasswd AuthGroupFile /dev/null AuthName "Please enter your ID(ajax) and password(test)" AuthType Basic require valid-user
これで、.htaccessを置いたディレクトリ以下へアクセスしようとすると、認証入力を要求するダイアログが開くようになります。

で、Ajaxでは、上記で設定したユーザー名とパスワードを open()メソッドの引数で下記のように指定します。
oj.open( 'POST' , 'http://jsgt.org/ajax/himitu/test.htm' , true , 'ajax', 'test' )

で、Ajaxで読み込む、このtest.htmに、日本語を使うなら、URIエンコード(encodeURIComponent())しておくのが安全です。今回使っている、URIエンコード済み文字列は、下記のものです。参考:PHPとJavaScriptのURIエンコードを比較
ok!%20This%20data%20was%20loaded%20from%20%3Cb%3EBasic%20authentication%3C/b%3E%20page.%20%E3%81%93%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AF%E3%80%81%E8%AA%8D%E8%A8%BC%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BE%E3%82%8C%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82

ただ、しょせん、「手軽に盗聴可能なBasic認証」であることを忘れてはいけません
また、上記open()メソッドの引数のように、ユーザー名とパスワードをスクリプトに直接埋め込むなどは、言語道断(^^;;であることも忘れないようにしましょう。

ってことで↓こんなのも試してみました。
【Ajax】SSL+Basic認証ページから読み込む
http://jsgt.org/mt/archives/01/000432.html