Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
正規表現って、人類にはまだ早かったのかな
Search
ymzkei5
August 20, 2020
Programming
410
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
正規表現って、人類にはまだ早かったのかな
セキュリティ昔話。
ymzkei5
August 20, 2020
Other Decks in Programming
See All in Programming
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
1
220
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
430
Web Framework Benchmark Battle 2026, Any%
a_matsuda
2
2.5k
npm との違いを手がかりにGo の依存管理を理解したい
optim
0
850
AWSに止められる覚悟してますか?
morizo_1984
2
540
phperだってパンチカードでコーディングしたい
o0h
PRO
0
350
[JA] Domain Modeling with Vanilla Rails: 「操作」から再考するRailsの設計論
yasaichi
3
450
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
610
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
110
Herb in Rails 8.2: Your ERB views, now HTML-aware @ Kaigi on Rails 2026, Tokyo, Japan
marcoroth
2
290
個人開発者よ、Honoを使え(おじさんver)
tanahiro2010
2
260
Featured
See All Featured
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Agile that works and the tools we love
rasmusluckow
331
22k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Build your cross-platform service in a week with App Engine
jlugia
234
19k
sira's awesome portfolio website redesign presentation
elsirapls
0
460
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
560
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Transcript
正規表現って、 人類にはまだ早かったのかな。 @ymzkei5
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 イメージ図
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 イメージ図 ※215.1.1.1 は説明のた めに入力した無関係な IPアドレスです。
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 • おじいさんが、スキャンをしようとIPアドレスを入れたら、
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 • おじいさんが、スキャンをしようとIPアドレスを入れたら、 「無効なIPアドレス」
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 • おじいさんが、スキャンをしようとIPアドレスを入れたら、 「無効なIPアドレス」 イメージ図 ※216.1.1.1 は説明のた
めに入力した無関係な IPアドレスです。
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 • おじいさんが、スキャンをしようとIPアドレスを入れたら、 「無効なIPアドレス」 • はて? 困ったのぉ。IPアドレスは合っているはずじゃが。。
Q • 昔々、あるところに、Qという有名なセキュリティスキャナが あったそうな。 • おじいさんが、スキャンをしようとIPアドレスを入れたら、 「無効なIPアドレス」 • はて? 困ったのぉ。IPアドレスは合っているはずじゃが。。
• 通信をプロキシで改ざんすると登録できるんじゃが、、怖い、、
おじいさん調べ 有効となるIPアドレス • 1.1.1.1 • 11.11.11.11 • 111.111.111.111 • 222.222.222.222
• 255.255.255.255 • 205.1.1.1 • 215.1.1.1 無効となるIPアドレス • 206.1.1.1 • 207.1.1.1 • 209.1.1.1 • 216.1.1.1 • 226.1.1.1 • 236.1.1.1 • 246.1.1.1 ※ すべて例示のための、無関係なIPアドレスです。
おじいさん調べ 有効となるIPアドレス • 1.1.1.1 • 11.11.11.11 • 111.111.111.111 • 222.222.222.222
• 255.255.255.255 • 205.1.1.1 • 215.1.1.1 無効となるIPアドレス • 206.1.1.1 • 207.1.1.1 • 209.1.1.1 • 216.1.1.1 • 226.1.1.1 • 236.1.1.1 • 246.1.1.1 ※ すべて例示のための、無関係なIPアドレスです。
妥当性チェックがバグってない? • 「無効なIPアドレス」エラーが表示される時、特に通信が発生 している様子は無い。 • JavaScript の DOM変化に Break 設定をして追ってみる。
犯人はオマエダ • 見つけた。 ipV4AllIp: function() { Ext.apply(Ext.form.VTypes, { ipv4AllIpValue: /^([0-9][0-9]{0,1}|1[0-9][0-9]|2[0-5][0-5])([.]([1-9]{0,1}[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])){2}[.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/, ipv4AllIpText: $L(" 何 – 見 – て – ん – だよ ", "Must be a numeric IPv4 address"), ipv4Mask: /[¥d¥.]/, ipV4AllIp: function(A) { return Ext.form.VTypes.ipv4AllIpValue.test(A) } });
犯人はオマエダ • 見つけた。 ipV4AllIp: function() { Ext.apply(Ext.form.VTypes, { ipv4AllIpValue: /^([0-9][0-9]{0,1}|1[0-9][0-9]|2[0-5][0-5])([.]([1-9]{0,1}[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])){2}[.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/, ipv4AllIpText: $L(" 何 – 見 – て – ん – だよ ", "Must be a numeric IPv4 address"), ipv4Mask: /[¥d¥.]/, ipV4AllIp: function(A) { return Ext.form.VTypes.ipv4AllIpValue.test(A) } });
犯人はオマエダ • 見つけた。 ipV4AllIp: function() { Ext.apply(Ext.form.VTypes, { ipv4AllIpValue: /^([0-9][0-9]{0,1}|1[0-9][0-9]|2[0-5][0-5])([.]([1-9]{0,1}[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])){2}[.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/, ipv4AllIpText: $L(" 何 – 見 – て – ん – だよ ", "Must be a numeric IPv4 address"), ipv4Mask: /[¥d¥.]/, ipV4AllIp: function(A) { return Ext.form.VTypes.ipv4AllIpValue.test(A) } }); お分かりいただけただろうか
犯人はオマエダ • 見つけた。 ipV4AllIp: function() { Ext.apply(Ext.form.VTypes, { ipv4AllIpValue: /^([0-9][0-9]{0,1}|1[0-9][0-9]|2[0-5][0-5])([.]([1-9]{0,1}[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])){2}[.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/, ipv4AllIpText: $L(" 何 – 見 – て – ん – だよ ", "Must be a numeric IPv4 address"), ipv4Mask: /[¥d¥.]/, ipV4AllIp: function(A) { return Ext.form.VTypes.ipv4AllIpValue.test(A) } }); 2[0-5][0-5] で 200~255 の意味・・・って、んなわけあるかーい
犯人はオマエダ • 見つけた。 ipV4AllIp: function() { Ext.apply(Ext.form.VTypes, { ipv4AllIpValue: /^([0-9][0-9]{0,1}|1[0-9][0-9]|2[0-5][0-5])([.]([1-9]{0,1}[0-9]|1[0-
9]{2}|2[0-4][0-9]|25[0-5])){2}[.](0|[1-9][0-9]{0,1}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/, ipv4AllIpText: $L(" 何 – 見 – て – ん – だよ ", "Must be a numeric IPv4 address"), ipv4Mask: /[¥d¥.]/, ipV4AllIp: function(A) { return Ext.form.VTypes.ipv4AllIpValue.test(A) } }); 後ろの方はあってるのに、どうして・・・
まとめ • 正規表現は、有名製品を開発するような、トップクラスの セキュリティエンジニアにもまだ早かった。 • 昔々と書いたけど、実は今日のことだった。時は2020年! オレノジカンヲカエセ !!! • 油断大敵。だね。