Binary × JavaScript
江戸前セキュリティ勉強会LT2015.01.24
+ Blob の
話
自己紹介
くらりど a.k.a. clariroid
• 普通の大学生
• 専攻:電気電子 (not 情
報 )
• mixi Scrap Challenge
• LT 初めてです。
自己紹介
くらりど a.k.a. clariroid
• 普通の大学生
• 専攻:電気電子 (not 情報 )
• mixi Scrap Challenge
• LT 初めてです。
JavaScript 製バイナリエディタ
BinaryEditor-JS
• http://clariroid.com/#editor
• 現状、 Firefox のみ安定動作
• とにかく重い
BinaryEditor-JS
【 ~ JS でバイナリファイルを作る手順 ~】
マシンのメモリに固定長バッファを用意↓
用意したバッファに書き込む↓
データを blob スキーム URL に変換
BinaryEditor-JS
【 ~ JS でバイナリファイルを作る手順 ~】
マシンのメモリに固定長バッファを用意↓
用意したバッファに書き込む↓
データを blob スキーム URL に変換
固定長バッファの欠点
• 指定したサイズでバッファをゼロクリア↓
• 所望の値でバッファの先頭から書き換え↓
• 不正な入力値を書き換え途中で弾くと末尾に余分なゼロパディングが残る
BinaryEditor-JS
【 ~ JS でバイナリファイルを作る手順 ~】
マシンのメモリに固定長バッファを用意↓
用意したバッファに書き込む↓
データを blob スキーム URL に変換
BinaryEditor-JS
【 ~ JS でバイナリファイルを作る手順 ~】
マシンのメモリに固定長バッファを用意↓
用意したバッファに書き込む↓
データを blob スキーム URL に変換
blob URL Scheme
Binary Large OBject -- blob
• 元々はデータベースでのデータ型不定長バイナリデータを扱うためのもの
• Web ではブラウザからマシンのメモリ内データにアクセスするスキーム
blob URL Scheme
Blob URL の基本形
blob:550e8400-e29b-41d4-a716-
446655440000
UUID (Universal Unique Identifier, RFC4122)
blob URL Scheme
Blob URL の基本形
blob:550e8400-e29b-41d4-a716-
446655440000
Version Number↓
UUID version 4(モダンブラウザは今現在 version 4 )
blob URL Scheme
Blob URL の基本形
blob:550e8400-e29b-41d4-a716-
446655440000
疑似乱数 (UUID version 4)
blob URL Scheme
Web アプリケーションからメモリ内のバイナリデータに安全にアクセスするため
• Same Origin Policy が適用される
• URL に生存時間がある
→ http:// と違って非永続的
• 「メモリ内の」 Blob のみにアクセス可
Blob URL × HTML5
// JavaScript
var blob = new Blob(
[ArrayBuffer],
{type: Content-Type}
);
Blob URL × HTML5
// JavaScript
var blob = new Blob(
[ArrayBuffer],
{type: Content-Type}
); // デフォルトでは
text/plain
Blob URL × HTML5
Content-Type 怪しい…Content-Type 怪しくない?
Blob URL × HTML5
もし BinaryEditor-JS でContent-Type が指定されなかったら
Blob URL × HTML5
<script>alert(1);</script>をバイナリで入力してみる
Blob URL × HTML5
Demo
Blob URL × HTML5
実際の BinaryEditor-JS では
“application/x-msdownload”
を Content-Type に指定
Blob URL × HTML5
“application/x-msdownload”↓
ファイルを開かずにダウンロードする
Blob URL × HTML5
“application/x-msdownload”↓
ファイルを開かずにダウンロードする
Blob URL × HTML5
“application/x-msdownload”↓
MS Windows 向けLinux or Mac はどーなの?
異論・反論・ Objection ?