Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Yuya Takeyama
2,720 views
HashTable と HashDos
Technology
◦
Business
◦
Related topics:
data-structure
•
Read more
3
Save
Share
Embed
Embed presentation
Download
Downloaded 19 times
1
/ 40
2
/ 40
3
/ 40
4
/ 40
5
/ 40
6
/ 40
7
/ 40
8
/ 40
9
/ 40
10
/ 40
11
/ 40
12
/ 40
13
/ 40
14
/ 40
15
/ 40
16
/ 40
17
/ 40
18
/ 40
19
/ 40
20
/ 40
21
/ 40
22
/ 40
23
/ 40
24
/ 40
25
/ 40
26
/ 40
27
/ 40
28
/ 40
29
/ 40
30
/ 40
31
/ 40
32
/ 40
33
/ 40
34
/ 40
35
/ 40
36
/ 40
37
/ 40
38
/ 40
39
/ 40
40
/ 40
More Related Content
PPTX
php7's ast
by
do_aki
PDF
Haskell で CLI
by
Nobutada Matsubara
PPTX
ActiveResourceが面白すぎる件
by
Kazuki MATSUMOTO
PDF
メタメタプログラミングRuby
by
emasaka
PPT
CPANの依存モジュールをもう少し正しく検出したい
by
charsbar
PPTX
CMSとPerlで遊ぼう
by
Daiki Ichinose
PDF
Local php-100828 2
by
Akio Ishida
PDF
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
by
de:code 2017
php7's ast
by
do_aki
Haskell で CLI
by
Nobutada Matsubara
ActiveResourceが面白すぎる件
by
Kazuki MATSUMOTO
メタメタプログラミングRuby
by
emasaka
CPANの依存モジュールをもう少し正しく検出したい
by
charsbar
CMSとPerlで遊ぼう
by
Daiki Ichinose
Local php-100828 2
by
Akio Ishida
[TL06] 日本の第一人者が C# の現状と今後を徹底解説! 「この素晴らしい C# に祝福を!」
by
de:code 2017
What's hot
PDF
Lisp batton - Common LISP
by
Masaomi CHIBA
PPTX
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
by
Satoshi Mimura
PDF
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
by
Fujio Kojima
PDF
リナックスに置ける様々なリモートエキスプロイト手法 by スクハー・リー
by
CODE BLUE
ODP
0x300
by
geek_alice
PDF
「Html sql」で図書館hpにアクセスしてみよう
by
Kentaro Matsui
PDF
[東京] JapanSharePointGroup 勉強会 #2
by
Atsuo Yamasaki
PPTX
PHP AST 徹底解説
by
do_aki
PDF
LINQソースでGO!
by
Kouji Matsui
PPTX
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
by
Fujio Kojima
PDF
Php5.4
by
ke-m kamekoopa
PDF
OPcache の最適化器の今
by
y-uti
PPTX
php-src の歩き方
by
do_aki
PDF
PECL を数えてみた
by
y-uti
PPTX
前期講座09
by
Takenori Nakagawa
PPTX
しょしんしゃのためのhello world
by
wata2ki
PPT
Glibc malloc internal
by
Motohiro KOSAKI
PPTX
PHP と SAPI と ZendEngine3 と
by
do_aki
PDF
Livesense tech night immutable-js at a glance
by
Yuta Shimakawa
KEY
Ll xcode
by
Net Kanayan
Lisp batton - Common LISP
by
Masaomi CHIBA
APASEC 2013 - ROP/JIT を使わずに DEP/ASLR を回避する手法を見てみた。
by
Satoshi Mimura
C# ドキドキ ライブ コーディング!! ~ 小島の分 ~ | BuriKaigi 2020
by
Fujio Kojima
リナックスに置ける様々なリモートエキスプロイト手法 by スクハー・リー
by
CODE BLUE
0x300
by
geek_alice
「Html sql」で図書館hpにアクセスしてみよう
by
Kentaro Matsui
[東京] JapanSharePointGroup 勉強会 #2
by
Atsuo Yamasaki
PHP AST 徹底解説
by
do_aki
LINQソースでGO!
by
Kouji Matsui
C# 式木 (Expression Tree) ~ LINQをより深く理解するために ~
by
Fujio Kojima
Php5.4
by
ke-m kamekoopa
OPcache の最適化器の今
by
y-uti
php-src の歩き方
by
do_aki
PECL を数えてみた
by
y-uti
前期講座09
by
Takenori Nakagawa
しょしんしゃのためのhello world
by
wata2ki
Glibc malloc internal
by
Motohiro KOSAKI
PHP と SAPI と ZendEngine3 と
by
do_aki
Livesense tech night immutable-js at a glance
by
Yuta Shimakawa
Ll xcode
by
Net Kanayan
Viewers also liked
PPTX
Hashtable
by
davidmogar
PPTX
Intro to Hash tables
by
Amy Hua
PPTX
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
PPTX
詳説ぺちぺち
by
do_aki
PDF
Php radomize
by
do_aki
PDF
セキュアな育毛
by
Ishibashi Ryosuke
PDF
オレオレPHPのつくり方
by
Ryusuke Sekiyama
KEY
PHPエクステンションの開発tips
by
Yoshio Hanawa
PPTX
Php in ruby
by
do_aki
PDF
zval をダイエットしてみた
by
Yoshio Hanawa
PDF
超初心者向け!Php勉強法とプログラミングの基礎の基礎
by
Hiroyuki Sugimoto
PPTX
SQLite2と3のエスケープ関数の違いとその対策
by
Akishige TAKEKOSHI
PDF
JIT のコードを読んでみた
by
y-uti
PDF
zend_parse_parametersと64bit環境
by
Yo Ya
PDF
PHPにおけるI/O多重化とyield
by
Yahoo!デベロッパーネットワーク
PPTX
PHP基礎勉強会
by
Yuji Otani
PPTX
signal の話 或いは Zend Signals とは何か
by
do_aki
PDF
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
by
Yoshio Hanawa
PPTX
PHP AST 徹底解説(補遺)
by
do_aki
PDF
PHP超入門@LL温泉
by
Sotaro Karasawa
Hashtable
by
davidmogar
Intro to Hash tables
by
Amy Hua
JavaScript非同期処理 入門
by
Ishibashi Ryosuke
詳説ぺちぺち
by
do_aki
Php radomize
by
do_aki
セキュアな育毛
by
Ishibashi Ryosuke
オレオレPHPのつくり方
by
Ryusuke Sekiyama
PHPエクステンションの開発tips
by
Yoshio Hanawa
Php in ruby
by
do_aki
zval をダイエットしてみた
by
Yoshio Hanawa
超初心者向け!Php勉強法とプログラミングの基礎の基礎
by
Hiroyuki Sugimoto
SQLite2と3のエスケープ関数の違いとその対策
by
Akishige TAKEKOSHI
JIT のコードを読んでみた
by
y-uti
zend_parse_parametersと64bit環境
by
Yo Ya
PHPにおけるI/O多重化とyield
by
Yahoo!デベロッパーネットワーク
PHP基礎勉強会
by
Yuji Otani
signal の話 或いは Zend Signals とは何か
by
do_aki
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
by
Yoshio Hanawa
PHP AST 徹底解説(補遺)
by
do_aki
PHP超入門@LL温泉
by
Sotaro Karasawa
Similar to HashTable と HashDos
PPTX
よくわかるHopscotch hashing
by
Kumazaki Hiroki
PDF
知って得する標準関数の使い方
by
Soudai Sone
PDF
ConcurrentHashMap Code Reading
by
Naoyuki Kakuda
PDF
[アルゴリズムイントロダクション勉強会] ハッシュ
by
Rei Takami
PDF
論文紹介: Cuckoo filter: practically better than bloom
by
Sho Nakazono
PDF
WDD2012_SC-004
by
Kuninobu SaSaki
PDF
コード読経会報告書
by
Masahiko Toyoshi
PPT
アルゴリズムとデータ構造9
by
Kenta Hattori
PDF
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
by
Etsuji Nakai
PDF
BinDataで バイナリデータを 楽に扱う
by
Ryouta Shirono
PDF
Data-Intensive Text Processing with MapReduce ch4
by
Sho Shimauchi
PDF
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
by
Atsushi KOMIYA
KEY
Ruby with Hash
by
Jun Yokoyama
PDF
BLOOM FILTER
by
Recruit Technologies
PDF
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
by
Yuto Takei
PPTX
知ってるようで意外と知らないPHPの便利関数
by
Wataru Terada
PPTX
1.2新機能と1.2から始めるcql3
by
seki_intheforest
PDF
【第3回初心者勉強会】データベースを使おう
by
Shuhei Iitsuka
ODP
本当は怖いPHP
by
Takuya Sato
PDF
アルゴリズム+データ構造勉強会(9)
by
noldor
よくわかるHopscotch hashing
by
Kumazaki Hiroki
知って得する標準関数の使い方
by
Soudai Sone
ConcurrentHashMap Code Reading
by
Naoyuki Kakuda
[アルゴリズムイントロダクション勉強会] ハッシュ
by
Rei Takami
論文紹介: Cuckoo filter: practically better than bloom
by
Sho Nakazono
WDD2012_SC-004
by
Kuninobu SaSaki
コード読経会報告書
by
Masahiko Toyoshi
アルゴリズムとデータ構造9
by
Kenta Hattori
EucalyptusのHadoopクラスタとJaqlでBasket解析をしてHiveとの違いを味わってみました
by
Etsuji Nakai
BinDataで バイナリデータを 楽に扱う
by
Ryouta Shirono
Data-Intensive Text Processing with MapReduce ch4
by
Sho Shimauchi
DSIRNLP #3 LZ4 の速さの秘密に迫ってみる
by
Atsushi KOMIYA
Ruby with Hash
by
Jun Yokoyama
BLOOM FILTER
by
Recruit Technologies
[Basic 3] 計算量 / 配列, 連結リスト / ハッシュ テーブル / スタック, キュー
by
Yuto Takei
知ってるようで意外と知らないPHPの便利関数
by
Wataru Terada
1.2新機能と1.2から始めるcql3
by
seki_intheforest
【第3回初心者勉強会】データベースを使おう
by
Shuhei Iitsuka
本当は怖いPHP
by
Takuya Sato
アルゴリズム+データ構造勉強会(9)
by
noldor
More from Yuya Takeyama
PDF
5分でわかる? 関数型 PHP の潮流
by
Yuya Takeyama
PDF
Good Parts of PHP and the UNIX Philosophy
by
Yuya Takeyama
PDF
Reactor Pattern and React
by
Yuya Takeyama
PDF
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
by
Yuya Takeyama
PDF
PHP と MySQL でカジュアルに MapReduce する (Short Version)
by
Yuya Takeyama
PDF
PHP と MySQL でカジュアルに MapReduce する
by
Yuya Takeyama
PDF
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
PDF
MySQL 入門的なはなし
by
Yuya Takeyama
PDF
Proposal for xSpep BDD Framework for PHP
by
Yuya Takeyama
PDF
Building Development Environment with php-build and phpenv
by
Yuya Takeyama
PDF
PHPUnit でよりよくテストを書くために
by
Yuya Takeyama
PDF
Making DSL with []
by
Yuya Takeyama
PDF
LIMIT 付きで UPDATE を行うと何故怒られるか
by
Yuya Takeyama
PDF
GOOS #1
by
Yuya Takeyama
PDF
Ruby 同好会宣言
by
Yuya Takeyama
ODP
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
by
Yuya Takeyama
5分でわかる? 関数型 PHP の潮流
by
Yuya Takeyama
Good Parts of PHP and the UNIX Philosophy
by
Yuya Takeyama
Reactor Pattern and React
by
Yuya Takeyama
PHP と MySQL で 1 カチャカチャカチャ...ッターン! MapReduce (@ニコニコ超会議)
by
Yuya Takeyama
PHP と MySQL でカジュアルに MapReduce する (Short Version)
by
Yuya Takeyama
PHP と MySQL でカジュアルに MapReduce する
by
Yuya Takeyama
PHPUnit でテスト駆動開発を始めよう
by
Yuya Takeyama
MySQL 入門的なはなし
by
Yuya Takeyama
Proposal for xSpep BDD Framework for PHP
by
Yuya Takeyama
Building Development Environment with php-build and phpenv
by
Yuya Takeyama
PHPUnit でよりよくテストを書くために
by
Yuya Takeyama
Making DSL with []
by
Yuya Takeyama
LIMIT 付きで UPDATE を行うと何故怒られるか
by
Yuya Takeyama
GOOS #1
by
Yuya Takeyama
Ruby 同好会宣言
by
Yuya Takeyama
第一回 社内勉強会 PHP Application Security Checklist に学ぶ PHP セキュリティ (Excerpt)
by
Yuya Takeyama
HashTable と HashDos
1.
HashTable
と HashDoS @yuya_takeyama
2.
For
the Beginners
3.
By
a Beginner
4.
アジェンダ •ハッシュテーブルとは • PHP におけるハッシュテーブル •
PHP における HashDoS
5.
ハッシュテーブルとは •Key から Value
を検索 • 連想配列に使われる • 基本的には効率的で高速 • 最悪の場合はとても非効率に
6.
http://www.is.titech.ac.jp/ kishi/classes/java11/java09.html
7.
PHP
における ハッシュテーブル •HashTable 構造体 • 複数の Bucket 構造体から成る • 順番を保持
8.
typedef struct _hashtable
{ uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; } HashTable;
9.
typedef struct _hashtable
{ uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; テーブルの dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; } HashTable; スロット数
10.
typedef struct _hashtable
{ uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; zend_bool bApplyProtection; } HashTable; 要素数
11.
typedef struct _hashtable
{ uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; 先頭 dtor_func_t pDestructor; zend_bool persistent; または unsigned char nApplyCount; zend_bool bApplyProtection; } HashTable; 末尾の要素
12.
typedef struct _hashtable
{ uint nTableSize; uint nTableMask; uint nNumOfElements; ulong nNextFreeElement; Bucket *pInternalPointer; Bucket *pListHead; Bucket *pListTail; Bucket **arBuckets; dtor_func_t pDestructor; zend_bool persistent; unsigned char nApplyCount; 要素の 集まり zend_bool bApplyProtection; } HashTable;
13.
ドユコト?
14.
可視化 しましょう
17.
<?php hashtable_dump(array(1, 2, 3,
4, 5, 6, 7, 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 8 pListHead: 0 pListTail: 7 **arBuckets: 0 => [0, NULL] 1 => [1, NULL] 2 => [2, NULL] 3 => [3, NULL] 4 => [4, NULL] テーブルの 5 => [5, NULL] 6 => [6, NULL] */ 7 => [7, NULL] スロット数
18.
<?php hashtable_dump(array(1, 2, 3,
4, 5, 6, 7, 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 8 pListHead: 0 pListTail: 7 **arBuckets: 0 => [0, NULL] 1 => [1, NULL] 2 => [2, NULL] 3 => [3, NULL] 4 => [4, NULL] 5 => [5, NULL] 6 => [6, NULL] */ 7 => [7, NULL] 要素数
19.
<?php hashtable_dump(array(1, 2, 3,
4, 5, 6, 7, 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 8 pListHead: 0 pListTail: 7 **arBuckets: 0 => [0, NULL] 1 => [1, NULL] 先頭 2 => [2, NULL] 3 => [3, NULL] 4 => [4, NULL] 5 => [5, NULL] または 6 => [6, NULL] */ 7 => [7, NULL] 末尾の要素
20.
<?php hashtable_dump(array(1, 2, 3,
4, 5, 6, 7, 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 8 pListHead: 0 pListTail: 7 **arBuckets: 0 => [0, NULL] 1 => [1, NULL] 2 => [2, NULL] 3 => [3, NULL] 4 => [4, NULL] 5 => [5, NULL] 要素の 6 => [6, NULL] */ 7 => [7, NULL] 集まり
21.
Bucket 構造体 •値の入れ物 • 配列内の一要素を表現 •
二重の双方向リスト
22.
typedef struct bucket
{ ulong h; uint nKeyLength; void *pData; キーの数値 void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; または struct bucket *pLast; const char *arKey; キー文字列の } Bucket; ここあんまり自信無いです... ハッシュ値
23.
typedef struct bucket
{ ulong h; uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; const char *arKey; } Bucket; キー文字列
24.
typedef struct bucket
{ ulong h; uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; const char *arKey; } Bucket; まだよく読めてないです... 値
25.
typedef struct bucket
{ ulong h; uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; ハッシュ struct bucket *pLast; const char *arKey; テーブル内の } Bucket; 前後の要素
26.
typedef struct bucket
{ ulong h; uint nKeyLength; void *pData; void *pDataPtr; struct bucket *pListNext; struct bucket *pListLast; struct bucket *pNext; struct bucket *pLast; const char *arKey; スロット内の } Bucket; 前後の要素
27.
二重の双方向リスト •ハッシュテーブル内のリスト -> 配列の走査に使う •スロット内のリスト -> ハッシュ値の衝突時に連結
28.
https://www.codeblog.org/blog/moriyoshi/20060824.html
29.
p = ht->pListHead; while
(p != NULL) { // p にごにょごにょする p = p->pListNext; } リスト全体の 走査
30.
h = ハッシュ値の計算(arKey,
nLength); // スロット番号の算出 nIndex = h & ht->nTableMask; p = ht->arBuckets[nIndex]; while (p != NULL) { if (キーが等しければ) { *pData = p->pData; return SUCCESS; } キーに p = p->pNext; } return FAILURE; よる探索
31.
PHP における HashDoS
32.
テキスト http://blog.tokumaru.org/2011/12/webdoshashdos.html
33.
HashDoS とは •ハッシュ値の衝突する連想配列を作る • Web
アプリに入力として与える •非効率な挿入・検索が起こる •効率よく DoS アタックができる
34.
<?php hashtable_dump(array(0 => 1,
8 => 2, 16 => 3, 24 => 4, 32 => 5, 40 => 6, 48 => 7, 56 => 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 57 pListHead: 0 pListTail: 56 **arBuckets: 0 => [56, 48, 40, 32, 24, 16, 8, 0, NULL] 1 => [NULL] 全ての要素が 2 => [NULL] 3 => [NULL] 4 => [NULL] 5 => [NULL] 6 => [NULL] */ 7 => [NULL] 同じスロットに
35.
<?php hashtable_dump(array(0 => 1,
8 => 2, 16 => 3, 24 => 4, 非効率な 32 => 5, 40 => 6, 48 => 7, 56 => 8)); /* nTableSize: 8 nTableMask: 7 nNumOfElements: 8 nNextFreeElement: 57 pListHead: 0 pListTail: 56 **arBuckets: 0 => [56, 48, 40, 32, 24, 16, 8, 0, NULL] 探索 1 => [NULL] 全ての要素が 2 => [NULL] 3 => [NULL] 4 => [NULL] 5 => [NULL] 6 => [NULL] */ 同じスロットに 7 => [NULL]
36.
HashDoS への対策 • 入力による HashTable
の生 成を制限する (max_input_vars とか) • 根本的解決では無いが, 現実的 なリスクを軽減できる • 続きは徳丸さんのブログで
37.
根本的な解決の事例 •Perl
(5.8.1 以降) • Ruby (1.8.7-p356 より後) • ハッシュ値の予測を困難にす る? まだよく調べてません...
38.
まとめ • PHP の HashTable
は HashDoS に対して脆弱であ る • 運用でカバーしましょう • 詳しくは徳丸さんのブログで
39.
ご清聴 ありがとう ございました
40.
参考資料 •
アルゴリズムとデータ構造編 第14章 ハッシュ探索①(チェイン法) http://www.geocities.jp/ky_webid/algorithm/014.html • PHPソースコードリーディング入門(とっかかり編) http://d.hatena.ne.jp/anatoo/20111031/1319991834 • Webアプリケーションに対する広範なDoS攻撃手法(hashdos)の影響と対策 http://blog.tokumaru.org/2011/12/webdoshashdos.html • Zend_Hash_Del_Key_Or_Index Vulnerability http://www.hardened-php.net/hphp/ zend_hash_del_key_or_index_vulnerability.html • ハッシュテーブルの実装 https://www.codeblog.org/blog/moriyoshi/20060824.html • PHP のコア: Zend Engine ハッカーの手引き http://www.php.net/manual/ja/internals2.php • PHP Extensions: Understanding and working with hash API Part 1 http://zendguru.wordpress.com/2009/05/10/php-extensions- understanding-and-working-with-hash-api-part-1/
Download