4.5K Views
July 29, 10
スライド概要
ガラケーで楽しむオレJSの勧め 2010年7月24日 徳丸 浩 @ockeghem / id:ockeghem
JavaScriptと私 興味をもったのはサイ本(第2版 1997/7)と出会ってのこと Aha! なんて面白い言語なんだ! 「オブジェクト指向プログラム言語としてのJavaScript 」サイトを立 ち上げる(1998年5月) 1998年のころと思われる www.tokumaru.orgは、Yahoo!のカテゴリではJavaScriptで登録され ている 1999年頃 お仕事で、JavaScript風のスクリプト言語を作った GreenScript:ケータイ向けサーバーサイドのスクリプト言語 仮想マシンへのコンパイル、GCはストップ&コピー型 しかし、表面的に似ているだけで、中身はまったく別 レキシカルスコープのみ…(^^; ケータイコンテンツの作成に使用される 初期メロッチャ etc その後10年間なにもしてこなかった 3
携帯電話とJavaScript 1999年のiモード以来、ケータイブラウザではJavaScriptが長らく サポートされていなかった EZwebは今でもサポートされていない いわゆるフルブラウザは除く ここでも話題に取り残されるKDDI 2009年5月22日以降のiモードブラウザ2.0端末ではJavaScriptが サポートされる ソフトバンクも2010年夏モデルの944SH(2010年6月18日発売)以 公式に対応 降、JavaScriptに対応 「公式に」って? 5
iモードブラウザ2.0の登場 2009年5月19日づけNTTドコモ社の報道発表より http://www.nttdocomo.co.jp/info/news_release/page/090519_00.html より引用 6
ソフトバンクでもJavaScriptに対応 実はちょっと違った http://k-tai.impress.co.jp/docs/news/20100518_367787.html より引用 7
本当に2010年夏モデルからなのか? 実はかなり以前からソフトバンク端末の一部のモデルで JavaScriptに対応していた ノキア 702NK(2004年12月発売)では簡単なJavaScriptに対応 804SS(2006年3月)、910T(2006年10月)、910SH(2006年11月) では、NetFront 3.3によるJavaScript対応 IFRAME、DOMに対応…攻撃に利用できる可能性*1 XMLHttpRequestには対応していない 922SH(2008年3月)では、NetFront 3.4にてAjaxに対応 XMLHttpRequestやIFRAME、DOMには対応していない XMLHttpRequest / setRequetHeaderのサポート 944SH, 945SH(2010年夏)にて正式対応 ユーザエージェントには SoftBank/2.0 とある 注 *1: 804SSはIFRAMEに対応していない 8
ソフトバンク社技術資料より 端末は、ソフトバンク携帯電話向けJavaScript を利用 できる。 ソフトバンク携帯電話向けJavaScript は、Standard ECMA-262 ECMAScript Language Specification 3rd edition[ECMASCRIPT]に準拠したJavaScript に DOM(DOM Level0[JavaScript13], W3C DOM Level1[DOM1], W3C DOM Level2[DOM2CORE] [DOM2EVENT][DOM2HTML][DOM2STYLE])+XML HttpRequest で定義されたインターフェイスを追加し たものである。 http://creation.mb.softbank.jp/docs/A-081-111-BrowserExtension_1.0.1.pdf より引用 9
ケータイJavaScriptの互換性 分かっている非互換性 オレ標準 ドコモの問題 ソフトバンク/1.0の問題 目立った機能制限無し setRequestHeaderの制限が緩い(後述) ソフトバンク/2.0の問題 alert、confirm、promptが動かない / setRequestHeaderが動かない いずれも何もしないメソッドに…(2009年11月のJavaScript再開後) XMLHttpRequestで、上位ディレクトリのファイルは読めない setRequestHeaderの制限 書き換え可能なヘッダは“x-xhr*”のみ alert/confirm/promptは使える 制限する理由はセキュリティ対策らしい 10
ドコモのalert停止はXSS対策? XSS脆弱なスクリプト(本日の唯一のJavaScript) <body> こんにちは<?php echo $_GET['p']; ?>さん </body> 以下のURLで呼び出し http://example.jp/xss.php?p=%3Cscript%3E alert(document.cookie)%3C/script%3E 結果は? 11
ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) 12
ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) XSSは発 動しない XSSが発 動する 13
ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) XSSは発 動しない XSSが発 動する 14
ドコモのalert停止はXSS対策? ドコモ(P-07A) alertが動か XSSは発 ないだけで 動しない XSSは有効 ソフトバンク(932SH) XSSが発 動する 15
ソフトバンクの「XSS対策」も発覚 URLに「<」、「>」、「”」のいずれかの文字がある場合、その文字以 降を削除してWebサーバに送出している http://example.jp/?p=foo<script>alert(document.cookie)</script> ↓ こうなる http://example.jp/?p=foo しかし、%エンコーディングされている場合はそのまま通すので、 XSS対策にはならない http://example.jp/?p=foo%3cscript%3ealert(document.cookie)%3c/s cript%3e はそのまま通るのでXSS対策としては意味がない URIとして使用できる文字のみ通すという訳でもなさそう なぜこういう仕様なのかは謎 すみません。今日はWeb標準の日でした < > ” はURIとして許されない文字なので問題ありません(_ _) 16
setRequestHeaderはどのヘッダを改変してよいか? http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest より引用・追記 17
初出:5月27日 http://mb.softbank.jp/mb/information/details/100527.html より引用 18
http://creation.mb.softbank.jp/docs/A-081-111-BrowserExtension_1.0.1.pdf より引用 19
20
twtr.jpの事例 http://www.tokumaru.org/d/20100222.html#p01 21
Ajax有効な機種のサマリ •ただし、SHARPの最新機種943SHのみは、Refererが送出されるが、改変はできない •△はデフォルトでAjax無効、オプションにより有効化可能(SHARP端末は多いので抜粋) •上記以外のPanasonic、Toshiba等はAjax無効 22
setRequestHeaer制限の副作用 iモード2.0、SoftBank 2.0ともsetRequestHeaderには厳しい制限 が掛かっている 互換性を損なう可能性 POSTリクエストの際に、Content-Typeが指定できなくなる requester.setRequestHeader(“Content-Type” , “application/x-www-form-urlencoded”); → irameで代替 prototype.jsでは、X-Requested-With、X-Prototype-Versionなどの ヘッダを設定している。これらが無効になるので、prototype.jsが使用 できなくなる可能性 Ajaxのセキュリティ対策として、setRequestHeaderを使う場合がある が、使えない(docomo)か、フィールド名を変更(SoftBank)する必要 がある(既存Ajaxアプリ、ライブラリの場合) 23
まとめ 最近のガラケーではJavaScriptが利用できる機種がある おもに「かんたんログイン」との関係で、JavaScriptには制限がか けられている ソフトバンクの古い機種には危険な仕様があるが、ユーザに制限 させるという「対策」がとられた NTTドコモとソフトバンクは、おなじACCESS製のブラウザが搭載 されているがJavaScriptの仕様が違う JavaScriptの制限が、アプリケーション開発上の制約となる可能 性が高い 24