SlideShare una empresa de Scribd logo
1 de 46
Descargar para leer sin conexión
徳丸本輪読会
進撃の第6-7章
KentaYAMAMOTO
1Sunday, May 26, 13
Agenda
•文字コード(全38ページ)
•携帯電話向け Web アプリケーション
(たったの1ページ)
2Sunday, May 26, 13
6 文字コードとセキュリティ
3Sunday, May 26, 13
UTF-8
使っとけばおk
なんだお
4Sunday, May 26, 13
徳丸本で
検証してみるか
5Sunday, May 26, 13
文字コード…恐ろしい子!
6Sunday, May 26, 13
文字コード文字コードと
言いますが、
次の3つの用語の違いがわかりますか?
7Sunday, May 26, 13
•文字コード
•文字集合
•文字エンコーディング
この3者の違いがわかりますか?
まずは定義厨になろう
8Sunday, May 26, 13
大まかな理解:
文字コード = 文字集合 + 文字エンコーディング
9Sunday, May 26, 13
つまり「文字コード」とは 文字集合
(character set) と 文字エンコーディング が
合わさった概念
(例) 僕達は普段どの文字集合を使うのかを文字
エンコーディングで指定している(符号化の方式
にはいろいろある)。
ということで、あってるかな^^;?
10Sunday, May 26, 13
で、
文字集合 (character set) とは
•ASCII とか
•JIS とか
•Unicode とか
あるよね
11Sunday, May 26, 13
Unicode系JIS系
Shift_JIS
EUC-JP
UTF-8
UTF-16
で、こっちが
文字エンコーディングたち
12Sunday, May 26, 13
人類の怠慢で
使用される文字集合が
統一されて来なかった悲劇
13Sunday, May 26, 13
そこで生じた
異なる文字が同じコードに
割り当てられる問題
14Sunday, May 26, 13
文字集合 0x5C 0xA5
ASCII  %
JIS X 0201 ¥ ・
ISO-8859-1  ¥
Unicode  ¥
例
15Sunday, May 26, 13
文字集合 0x5C 0xA5
ASCII  %
JIS X 0201 ¥ ・
ISO-8859-1  ¥
Unicode  ¥
ちょw
例
16Sunday, May 26, 13
¥
17Sunday, May 26, 13
やばいケースの例
Unicode
「¥」(U+00A5)
JIS系
「¥」(0x5C)
「円記号」だから
変換しておこう
JIS系
「¥」(0x5C)
「¥」(0x5C)なの
でエスケープ処理を華麗にス
ルー
突然のバック
スラッシュ
「」!
Unicodeに戻す
(0x5C)
死のSQL
インジェクション
18Sunday, May 26, 13
やばいケースの例
Unicode
「¥」(U+00A5)
JIS系
「¥」(0x5C)
「円記号」だから
変換しておこう
JIS系
「¥」(0x5C)
「¥」(0x5C)なの
でエスケープ処理を華麗にス
ルー
突然のバック
スラッシュ
「」!
Unicodeに戻す
(0x5C)
処理系によっては
こうなりますよと
いう話
19Sunday, May 26, 13
Shift_JIS の仕組みを見てみましょう
結構効率は良いらしい
しかし…
20Sunday, May 26, 13
問題(2) 符号化された文字列の1バイトを
取り出しても先行バイトか
後続バイトか分からない
同じ 0x81 ~ 0x9F
0xE0 ~ 0xFC だからね
問題(1) 1バイト文字と2バイト文字の後続バイトに重なりがある
21Sunday, May 26, 13
Shift_JIS の問題 (1)
いわゆる「5C」問題
「表」の2バイト目に ¥ がマッチする
22Sunday, May 26, 13
<?php
$p = strpos( ラリルレロ , 宴 );
var_dump($p); // => 1
Shift_JIS の問題 (2)
先行か後続か分からない問題
文字列 ラリルレロ の中で、 宴 が最初に現れる位置
を探す strpos 関数。
=> false を期待したが無情なまでの 1(0オリジン)
23Sunday, May 26, 13
Shift_JIS の問題 (2)
先行か後続か分からない問題
「ラ」の2バイト目と
「リ」の1バイト目にマッチしちゃってる
24Sunday, May 26, 13
1. 例えば、strpos 関数を避ける。
代わりにマルチバイト対応の
mb_strpos を使う(内部エンコーディ
ングは Shift_JIS を指定)。
2. UTF-8 を利用する(保険)
Shift_JIS
こういった問題の対策
25Sunday, May 26, 13
「5C問題」の EUC-JP 版はないが、
「先行後続バイト問題」はあるので。
ちなみに EUC-JP の
脆弱性にも有効です
26Sunday, May 26, 13
index.php?
name=1%82&mail=onmouseov
er%dalert(document.cookie)//
FYI: Shift_JIS
こんな攻撃あります
27Sunday, May 26, 13
FYI: Shift_JIS
こんな攻撃あります
こんなあられもない姿に (*ノノ)
うひょ∼
28Sunday, May 26, 13
FYI: Shift_JIS
こんな攻撃あります
対策:
htmlcpecialchars($GET[ name ],
ENT_QUOTES, Shift_JIS );
を使いましょう
29Sunday, May 26, 13
対策まとめ
4つのチェックポイント
1. 全体 2. 入力 3. 処理 4. 出力
30Sunday, May 26, 13
「文字集合の統一」
31Sunday, May 26, 13
できないよね
ガラケーって Shift_JIS 指定も多いから
32Sunday, May 26, 13
とはいえポイントは一緒
なので
対策の要点だけ紹介します
33Sunday, May 26, 13
ガラケーチェックポイント
不正な文字エンコーディングは弾くか
代替文字 (U+FFFD) に変換
34Sunday, May 26, 13
ガラケーチェックポイント
※これは一緒
マルチバイトセーフ関数と
引数に文字エンコーディングの明示
35Sunday, May 26, 13
ガラケーチェックポイント
HTTPレスポンスヘッダ
Content-Type 指定
※ ガラケーは Shift_JIS
それ以外は UTF-8
36Sunday, May 26, 13
ガラケーチェックポイント
「尾骶骨テスト」
37Sunday, May 26, 13
ガラケーチェックポイント
「尾骶骨テスト」
「表」や「ソ」、「能¥」が
正しく登録・表示されるか
38Sunday, May 26, 13
徳丸語「文字集合縮退」
起こるべき文字化けをあら
かじめ起こしたあとでエス
ケープする
これでDBに ¥ が入ってい
てもバックスラッシュに変
換された後エスケープされ
る
39Sunday, May 26, 13
ということで
UTF-8
40Sunday, May 26, 13
41Sunday, May 26, 13
非最短形式の問題
http://gihyo.jp/admin/serial/
01/charcode/0004
UTF-8 が完璧なわけではない
PHP5.3.1 以前の htmlspecialchars 関数は
非最短形式を許容してしまうので注意
42Sunday, May 26, 13
PHP以外では: 既にあたり前になりつつ
ある文字エンコーディングバリデーショ
ン - 徳丸浩の日記(2009-09-14)
http://www.tokumaru.org/d/
20090914.html
そのころPHP以外では…
43Sunday, May 26, 13
7 携帯電話向け
Web アプリケーションの脆弱性対策
44Sunday, May 26, 13
脅威 対策
かんたんログインに対する不正アクセス
携帯IDによる認証をやめ、IDとパスワードによる認証にする。オプ
ションでクッキーによる自動ログインを実装する。
Referer によるセッションID漏洩
以下のいずれかを実施する
・クッキーによるセッション管理に移行する
・外部サイトにリンクしない
・外部サイトにリンクする際にはクッションページをはさむ
その他のセッションID漏洩 利用者がメールでURLを教えることには根本的な対策はない
ログイン前のセッションIDの固定化 ログイン前にはセッションを有効化しない
ログイン後のセッションIDの固定化 ログイン直後にセッションIDを変更する
45Sunday, May 26, 13
ガラケーに関する細かいことはまた今度だ
46Sunday, May 26, 13

Más contenido relacionado

Destacado

文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
Hiroshi Tokumaru
 
Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪
1000 VICKY
 

Destacado (19)

オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
 
文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会
 
文字コードのお話
文字コードのお話文字コードのお話
文字コードのお話
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)
 
文字コード基礎論A
文字コード基礎論A文字コード基礎論A
文字コード基礎論A
 
C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回C#でゲームを作る2016 第1回
C#でゲームを作る2016 第1回
 
Windows改造計画
Windows改造計画Windows改造計画
Windows改造計画
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)
 
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0
 
C++ マルチスレッド 入門
C++ マルチスレッド 入門C++ マルチスレッド 入門
C++ マルチスレッド 入門
 
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
 
プログラムを高速化する話
プログラムを高速化する話プログラムを高速化する話
プログラムを高速化する話
 
よいコード、わるいコード
よいコード、わるいコードよいコード、わるいコード
よいコード、わるいコード
 
Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
create account book by c#
create account book by c#create account book by c#
create account book by c#
 
BCCとGCCの比較
BCCとGCCの比較BCCとGCCの比較
BCCとGCCの比較
 

Más de Kenta Yamamoto

優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則
Kenta Yamamoto
 

Más de Kenta Yamamoto (10)

The Art of Command Line (2021)
The Art of Command Line (2021)The Art of Command Line (2021)
The Art of Command Line (2021)
 
Vulnerability Detection Based on Git History
Vulnerability Detection Based on Git HistoryVulnerability Detection Based on Git History
Vulnerability Detection Based on Git History
 
[論文紹介] VCC-Finder: Finding Potential Vulnerabilities in Open-Source Projects ...
[論文紹介] VCC-Finder: Finding Potential Vulnerabilities in Open-Source Projects ...[論文紹介] VCC-Finder: Finding Potential Vulnerabilities in Open-Source Projects ...
[論文紹介] VCC-Finder: Finding Potential Vulnerabilities in Open-Source Projects ...
 
良いUrlを設計する
良いUrlを設計する良いUrlを設計する
良いUrlを設計する
 
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか 私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか
 
Tips for bash script
Tips for bash scriptTips for bash script
Tips for bash script
 
優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則
 
20110805 ui14課題2
20110805 ui14課題220110805 ui14課題2
20110805 ui14課題2
 
20110804 ui14課題
20110804 ui14課題20110804 ui14課題
20110804 ui14課題
 
東日本大震災後の訪日外国人数の変移_2011.3
東日本大震災後の訪日外国人数の変移_2011.3東日本大震災後の訪日外国人数の変移_2011.3
東日本大震災後の訪日外国人数の変移_2011.3
 

Último

Último (11)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 

文字コードとセキュリティ