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

2.5K Views

July 29, 10

スライド概要

profile-image

徳丸本の中の人 OWASP Japanアドバイザリーボード EGセキュアソリューションズ取締役CTO IPA非常勤職員 YouTubeチャンネル: 徳丸浩のウェブセキュリティ講座 https://j.mp/web-sec-study

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

ガラケーで楽しむオレJSの勧め 2010年7月24日 徳丸 浩 @ockeghem / id:ockeghem

2.

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

4.

iモードブラウザ2.0の登場 2009年5月19日づけNTTドコモ社の報道発表より http://www.nttdocomo.co.jp/info/news_release/page/090519_00.html より引用 6

5.

ソフトバンクでもJavaScriptに対応 実はちょっと違った http://k-tai.impress.co.jp/docs/news/20100518_367787.html より引用 7

6.

本当に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

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

15.

setRequestHeaderはどのヘッダを改変してよいか? http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest より引用・追記 17

16.

初出:5月27日 http://mb.softbank.jp/mb/information/details/100527.html より引用 18

17.

http://creation.mb.softbank.jp/docs/A-081-111-BrowserExtension_1.0.1.pdf より引用 19

19.

twtr.jpの事例 http://www.tokumaru.org/d/20100222.html#p01 21

20.

Ajax有効な機種のサマリ •ただし、SHARPの最新機種943SHのみは、Refererが送出されるが、改変はできない •△はデフォルトでAjax無効、オプションにより有効化可能(SHARP端末は多いので抜粋) •上記以外のPanasonic、Toshiba等はAjax無効 22

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