OperaのWidgetからlocalhostにアクセスできない件
JQuery(じゃなくてもいいけど)を使って以下のようにアクセス。
$.ajax(
{
type : "GET"
, url : "http://127.0.0.1:10080/"
, data: "foo=1&bar=2"
, async : false
, dataType : "html"
, success : function( data, status ) {
log( data, status );
}
}
);
すると、以下のようなエラーが返ってきた。
JavaScript - file://localhost/C:/widget/hogehoge/index.html
Event thread: DOMContentLoaded
Error:
name: Error
message: Security violation
これを見て、Opera的にはlocalhostも立派なローカルストレージの一部であり、プライベートな領域だからアクセスできないようにしていると思った。
という旨をTwitterで愚痴ったところ、edvakfさんからOpera Widgets security model - Opera Developer Communityのページを紹介して頂いた(というかページの存在に今まで気づかなかったのもどうかと思うが)。このページの中に以下のような記述が。
The following IPv4 IP ranges are defined as intranets:
- 10.0.0.0 to 10.255.255.255
- 172.16.0.0 to 172.31.255.255
- 192.168.0.0 to 192.168.255.255
- 169.254.0.0 to 169.254.255.255
Opera Widgetが接続を許可しているイントラのIPアドレスの範囲だが、自分のPC=localhostは127.0.0.1なので許可されていない。
やはりセキュリティ的にアクセスさせない方向だったか・・・いや、むしろサーバーのほうを変えてみるというのはどうだ?
WebrickのServerを以下のように設定して起動させてみる。
server = WEBrick::HTTPServer.new( {
:Port => 10080,
:BindAddress => '192.168.0.***'
} )
BindAddressにはプライベートアドレスを。でもってWidget側でアクセスしてみたところ、見事に反応が返ってきた。
ただ、これってセキュリティ的にどうなのよ? と思ったら、しっかり書いてあった。
A special limitation is that widgets may only contact either internet addresses or intranet addresses, not both kinds.
つまり、Widgetはインターネットかイントラネットのどちらかにしか接続できませんよ、と。実際に試したところ、http://www.yahoo.co.jp/にリクエストを出したWidgetでは、リロードしようが何しようがローカルには一切接続できなくなった。逆もしかりで、削除するまで有効な設定として残るようだ。
これなら、例えプライベートアドレス+ポートを総当りで恥ずかしいデータを抜かれても外に持ち出せない、ということなのだな。
いちいちサーバーにスクリプトをアップロードせずともローカルだけでテストできるようにしたかったので、テスト用途ならこの仕様で満足だわ。
Info
Navigation
- 関連のあるエントリ
- 2007-11-14 続・ニコニコ動画視聴補助スクリプト for Opera
- 2007-09-05 怒本格最速ブラウザが完全進化「Opera 9.5 Alpha 1」
- 2006-08-01 ニンテンドーDSブラウザでAjax
- 2007-04-14 ニコニコ動画視聴補助スクリプト for Opera
- 2007-06-18 ニコニコ動画視聴補助CSS
- 新しいエントリ(日付順)
- JavaScriptを使わずにブックマークコメントを表示
- 古いエントリ(日付順)
- カドゥケウス NEW BLOOD Extream タイムアタック
SBM Comments
Comment
投稿したコメントは公開されません。サイトオーナーのみが閲覧できます。
返信等を希望する場合は、コメント内に連絡先のメールアドレスかサイトのURLを入力してください。
2008
0602