SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
徳丸本輪読会
進撃の第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

Mais conteúdo relacionado

Destaque

オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!
オープン・ソースで構築するARMマイコン開発環境 ―― GCC,Eclipse,OpenOCDで統合開発環境,JTAGデバッグもできる!Masaki Muranaka
 
文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付き文字コード入門 理論編 クイズ付き
文字コード入門 理論編 クイズ付きTakao Baba
 
独学道場アセンブリの会
独学道場アセンブリの会独学道場アセンブリの会
独学道場アセンブリの会Ryota Suenaga
 
文字コードのお話
文字コードのお話文字コードのお話
文字コードのお話Shunji Konishi
 
Cコンパイラの改造(未)
Cコンパイラの改造(未)Cコンパイラの改造(未)
Cコンパイラの改造(未)7shi
 
文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)文字コードに起因する脆弱性とその対策(増補版)
文字コードに起因する脆弱性とその対策(増補版)Hiroshi Tokumaru
 
5分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.05分でインストール!awsでzabbix3.0
5分でインストール!awsでzabbix3.0Tadashi Mishima
 
Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪Unicodeについて教えてgooでしつこくきいてみたよ♪
Unicodeについて教えてgooでしつこくきいてみたよ♪1000 VICKY
 
create account book by c#
create account book by c#create account book by c#
create account book by c#Naoki Hanakawa
 

Destaque (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の比較
 

Mais de Kenta Yamamoto

The Art of Command Line (2021)
The Art of Command Line (2021)The Art of Command Line (2021)
The Art of Command Line (2021)Kenta Yamamoto
 
Vulnerability Detection Based on Git History
Vulnerability Detection Based on Git HistoryVulnerability Detection Based on Git History
Vulnerability Detection Based on Git HistoryKenta Yamamoto
 
[論文紹介] 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 ...Kenta Yamamoto
 
良いUrlを設計する
良いUrlを設計する良いUrlを設計する
良いUrlを設計するKenta Yamamoto
 
私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか 私たちは何を Web っぽいと感じているのか
私たちは何を Web っぽいと感じているのか Kenta Yamamoto
 
優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則優れたビデオゲームに共通する不変の法則
優れたビデオゲームに共通する不変の法則Kenta Yamamoto
 
東日本大震災後の訪日外国人数の変移_2011.3
東日本大震災後の訪日外国人数の変移_2011.3東日本大震災後の訪日外国人数の変移_2011.3
東日本大震災後の訪日外国人数の変移_2011.3Kenta Yamamoto
 

Mais 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

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Último (9)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

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