SlideShare a Scribd company logo
ガラケーで楽しむオレJSの勧め



                  2010年7月24日
                          徳丸 浩
         @ockeghem / id:ockeghem
JavaScriptと私

   興��をもったのはサイ本(第2版 1997/7)と出会ってのこと
       1998年のころと思われる
   Aha! なんて面白い言語なんだ!
   「オブジェクト指向プログラム言語としてのJavaScript 」サイトを立
    ち上げる(1998年5月)
       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に対応
       XMLHttpRequestやIFRAME、DOMには対応していない
   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 / 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の互換性

   分かっている非互換性 オレ標準
   ドコモの問題
       alert、confirm、promptが動かない / setRequestHeaderが動かない
        いずれも何もしないメソッドに…(2009年11月のJavaScript再開後)
       XMLHttpRequestで、上位ディレクトリのファイルは読めない
   ソフトバンク/1.0の問題
       目立った機能制限無し
       setRequestHeaderの制限が緩い(後述)
   ソフトバンク/2.0の問題
       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)       ソフトバンク(932SH)




     alertが動か
     XSSは発
     ないだけで
     動しない
     XSSは有効             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

More Related Content

ガラケーで楽しむオレJSの勧め

  • 1. ガラケーで楽しむオレJSの勧め 2010年7月24日 徳丸 浩 @ockeghem / id:ockeghem
  • 2. JavaScriptと私  興味をもったのはサイ本(第2版 1997/7)と出会ってのこと  1998年のころと思われる  Aha! なんて面白い言語なんだ!  「オブジェクト指向プログラム言語としてのJavaScript 」サイトを立 ち上げる(1998年5月)  www.tokumaru.orgは、Yahoo!のカテゴリではJavaScriptで登録され ている  1999年頃 お仕事で、JavaScript風のスクリプト言語を作った  GreenScript:ケータイ向けサーバーサイドのスクリプト言語  仮想マシンへのコンパイル、GCはストップ&コピー型  しかし、表面的に似ているだけで、中身はまったく別  レキシカルスコープのみ…(^^;  ケータイコンテンツの作成に使用される 初期メロッチャ etc  その後10年間なにもしてこなかった 3
  • 3. 携帯電話とJavaScript  1999年のiモード以来、ケータイブラウザではJavaScriptが長らく サポートされて��なかった  EZwebは今でもサポートされていない  いわゆるフルブラウザは除く  ここでも話題に取り残されるKDDI  2009年5月22日以降のiモードブラウザ2.0端末ではJavaScriptが サポートされる  ソフトバンクも2010年夏モデルの944SH(2010年6月18日発売)以 公式に対応 降、JavaScriptに対応 「公式に」って? 5
  • 5. ソフトバンクでもJavaScriptに対応 実はちょっと違った http://k-tai.impress.co.jp/docs/news/20100518_367787.html より引用 7
  • 6. 本当に2010年夏モデルからなのか?  実はかなり以前からソフトバンク端末の一部のモデルで JavaScriptに対応していた  ノキア 702NK(2004年12月発売)では簡単なJavaScriptに対応  XMLHttpRequestやIFRAME、DOMには対応していない  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 / setRequetHeaderのサポート  944SH, 945SH(2010年夏)にて正式対応  ユーザエージェントには SoftBank/2.0 とある 注 *1: 804SSはIFRAMEに対応していない 8
  • 7. ソフトバンク社技術資料より 端末は、ソフトバンク携帯電話向け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
  • 8. ケータイJavaScriptの互換性  分かっている非互換性 オレ標準  ドコモの問題  alert、confirm、promptが動かない / setRequestHeaderが動かない いずれも何もしないメソッドに…(2009年11月のJavaScript再開後)  XMLHttpRequestで、上位ディレクトリのファイルは読めない  ソフトバンク/1.0の問題  目立った機能制限無し  setRequestHeaderの制限が緩い(後述)  ソフトバンク/2.0の問題  setRequestHeaderの制限 書き換え可能なヘッダは“x-xhr*”のみ  alert/confirm/promptは使える  制限する理由はセキュリティ対策らしい 10
  • 9. ドコモの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
  • 10. ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) 12
  • 11. ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) XSSは発 動しない XSSが発 動する 13
  • 12. ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) XSSは発 動しない XSSが発 動する 14
  • 13. ドコモのalert停止はXSS対策? ドコモ(P-07A) ソフトバンク(932SH) alertが動か XSSは発 ないだけで 動しない XSSは有効 XSSが発 動する 15
  • 14. ソフトバンクの「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
  • 18. 20
  • 21. 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
  • 22. まとめ  最近のガラケーではJavaScriptが利用できる機種がある  おもに「かんたんログイン」との関係で、JavaScriptには制限がか けられている  ソフトバンクの古い機種には危険な仕様があるが、ユーザに制限 させるという「対策」がとられた  NTTドコモとソフトバンクは、おなじACCESS製のブラウザが搭載 されているがJavaScriptの仕様が違う  JavaScriptの制限が、アプリケーション開発上の制約となる可能 性が高い 24