SlideShare a Scribd company logo
1 of 12
Пример fuzz testing для поиска URL в тексте
                        Николай Ходов (nkhodov@gmail.com)
Fuzz testing
Условное деление
Задача
●   В произвольном тексте:




●   Найти все URL'ы
Бесплотные попытки
                     А как же вот это?!
                 ●   ya.ru
                 ●   It.s.bori.ng
                 ●   vk.com/durov
                 ●   Google.com/#plus-plus
                 ●   //st.domain.com/?q=1
https?://(.*?)   ●   И еще миллионы
                     вариантов...
Пишем регулярку



                                              RFC 1738
                              +


(https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?
Тестируем вручную
●   self.assertEqual(strip_links('word1 https://ya.ru word2'), 'word1
    word2')
●   self.assertEqual(strip_links('word1 domain.arpa/test.link word2'),
    'word1 word2')
●   self.assertEqual(strip_links('word1 ya.ru/yandsearch?
    sdfsdfsdf=1fsdf word2'), 'word1 word2')
●   self.assertEqual(strip_links('word1 naked.domain.asia word2'),
    'word1 word2')
●   …
●   На 15 строке мозг усиленно отказывается что-либо
    придумывать.
Пусть тестирует сам компьютер!
Fully Random URL


   Kwh89 ydhfj 09 u ><LAKSUy236 v




Текст должен остаться неизменным
Баги
●   Домены не могут начинаться на “-” (тире)
●   RFC не последняя инстанция (//)
●   Разные наборы символов для query string и
    для пути
Надежность
●   Не дает 100%-покрытия на границах (где
    обычно все самое вкусное)
●   Не факт, что будут выявлены критичные
    баги
●   Но...
●   Вы можете прогнозировать поведение
    программы в стресс-режиме
Применимость
●   Применим на стыках взаимодействия
    программ (форматы файлов, передача
    данных, внешние события)
●   Очень сильно помогает выявить на раннем
    этапе то, что может “завалить” программу в
    боевом режиме
Вопросы?

More Related Content

What's hot

Отдаем страницы быстрее или как вписаться в требования Google
Отдаем страницы быстрее или как вписаться в требования GoogleОтдаем страницы быстрее или как вписаться в требования Google
Отдаем страницы быстрее или как вписаться в требования GoogleIT61
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует GoArtem Kovardin
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов» Badoo Development
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Daniel Podolsky
 
Релизы? Регулярно по пятницам
 Релизы? Регулярно по пятницам Релизы? Регулярно по пятницам
Релизы? Регулярно по пятницамDevDay
 
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».Андрей Бростовский
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Anatoly Sharifulin
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)Badoo Development
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplantit-people
 
2013 09 14 деплой
2013 09 14 деплой2013 09 14 деплой
2013 09 14 деплойYandex
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Mail.ru Group
 

What's hot (19)

Отдаем страницы быстрее или как вписаться в требования Google
Отдаем страницы быстрее или как вписаться в требования GoogleОтдаем страницы быстрее или как вписаться в требования Google
Отдаем страницы быстрее или как вписаться в требования Google
 
Как ВКонтакте использует Go
Как ВКонтакте использует GoКак ВКонтакте использует Go
Как ВКонтакте использует Go
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»  Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
Паша Мурзаков: Как 200 строк на Go помогли нам освободить 15 серверов»
 
Postgres
PostgresPostgres
Postgres
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Golang
GolangGolang
Golang
 
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
Golang в действии: Как нам удается писать highload приложение на (не?)подходя...
 
Релизы? Регулярно по пятницам
 Релизы? Регулярно по пятницам Релизы? Регулярно по пятницам
Релизы? Регулярно по пятницам
 
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».
Между дизайнером и программистом: инструментарий в «Аллодах Онлайн».
 
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)Perl 5.16 and beyond by Jesse Vincent (Русская версия)
Perl 5.16 and beyond by Jesse Vincent (Русская версия)
 
Per! А что дальше?
Per! А что дальше?Per! А что дальше?
Per! А что дальше?
 
"Великолепный API без Rest", Констатин Якушев (Badoo)
 "Великолепный API без Rest", Констатин Якушев (Badoo) "Великолепный API без Rest", Констатин Якушев (Badoo)
"Великолепный API без Rest", Констатин Якушев (Badoo)
 
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
50 оттенков кеширования: обзор актуальных батареек - Григорий Петров, VoxImplant
 
2013 09 14 деплой
2013 09 14 деплой2013 09 14 деплой
2013 09 14 деплой
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
 

Similar to Fuzz testing

Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodNikita Baksalyar
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04Computer Science Club
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2Computer Science Club
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bashkuchinskaya
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...Ontico
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3Computer Science Club
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»Yandex
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014it-people
 
“Разговоры на разных диалектах”, Артем Захарченко, DevPro
“Разговоры на разных диалектах”, Артем Захарченко, DevPro“Разговоры на разных диалектах”, Артем Захарченко, DevPro
“Разговоры на разных диалектах”, Артем Захарченко, DevProDataArt
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Ontico
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor ShepelevA tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor ShepelevRuby Meditation
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseAlexander Granin
 

Similar to Fuzz testing (20)

Rust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny NovgorodRust - GDG DevFest 2016 Nizhny Novgorod
Rust - GDG DevFest 2016 Nizhny Novgorod
 
20120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-0420120226 information retrieval raskovalov_lecture03-04
20120226 information retrieval raskovalov_lecture03-04
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
20111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture220111001 information retrieval raskovalov_lecture2
20111001 information retrieval raskovalov_lecture2
 
Romanova techforum bash
Romanova techforum bashRomanova techforum bash
Romanova techforum bash
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)специализированные http-демона (Сергей Боченков, Александр Панков)
специализированные http-демона (Сергей Боченков, Александр Панков)
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...PostgreSQL: практические примеры оптимизации SQL-запросов /  Иван Фролков (Po...
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
 
About Python
About PythonAbout Python
About Python
 
20111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture320111002 information retrieval raskovalov_lecture3
20111002 information retrieval raskovalov_lecture3
 
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
FrontTalks: Алексей Андросов (Яндекс), «Ошибки, которые мы любим»
 
Joker2014
Joker2014Joker2014
Joker2014
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
 
“Разговоры на разных диалектах”, Артем Захарченко, DevPro
“Разговоры на разных диалектах”, Артем Захарченко, DevPro“Разговоры на разных диалектах”, Артем Захарченко, DevPro
“Разговоры на разных диалектах”, Артем Захарченко, DevPro
 
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
Практическое применение WebWorkers / Алексей Фомкин (Data Monsters)
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor ShepelevA tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
A tale of query languages. Is GraphQL the chosen one? - Victor Shepelev
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Профессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом EnterpriseПрофессиональная разработка в суровом Enterprise
Профессиональная разработка в суровом Enterprise
 

Fuzz testing

  • 1. Пример fuzz testing для поиска URL в тексте Николай Ходов (nkhodov@gmail.com)
  • 4. Задача ● В произвольном тексте: ● Найти все URL'ы
  • 5. Бесплотные попытки А как же вот это?! ● ya.ru ● It.s.bori.ng ● vk.com/durov ● Google.com/#plus-plus ● //st.domain.com/?q=1 https?://(.*?) ● И еще миллионы вариантов...
  • 6. Пишем регулярку RFC 1738 + (https?://)?<domain>{1,3}.<TLD>(/<path>)*(?<query_string>?)(#<hashtag>?)?
  • 7. Тестируем вручную ● self.assertEqual(strip_links('word1 https://ya.ru word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 domain.arpa/test.link word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 ya.ru/yandsearch? sdfsdfsdf=1fsdf word2'), 'word1 word2') ● self.assertEqual(strip_links('word1 naked.domain.asia word2'), 'word1 word2') ● … ● На 15 строке мозг усиленно отказывается что-либо придумывать.
  • 8. Пусть тестирует сам компьютер! Fully Random URL Kwh89 ydhfj 09 u ><LAKSUy236 v Текст должен остаться неизменным
  • 9. Баги ● Домены не могут начинаться на “-” (тире) ● RFC не последняя инстанция (//) ● Разные наборы символов для query string и для пути
  • 10. Надежность ● Не дает 100%-покрытия на границах (где обычно все самое вкусное) ● Не факт, что будут выявлены критичные баги ● Но... ● Вы можете прогнозировать поведение программы в стресс-режиме
  • 11. Применимость ● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события) ● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме

Editor's Notes

  1. Русского термина нет: fuzz – это пух. Можно провести такое сравнение: fuzz testing – это как человек, который пытается усидеть на скачущем быке. Скорость и амплитуда движений быка зависит от многих условий.
  2. Черный ящик – мы ничего не знаем о системе: поис багов, сплойтов, падений системы Серый ящик - есть догадки о поведении: протоколы, форматы файлов Белый ящик – все знаем о системе: все выше перечисленное Рандомные данные: что будет с системой, если она будет получать “белый шум”? Правильные данные: корректно ли система обрабатывает множество различных наборов данных? Ошибочные данные: как система себя поведет в случае сбоя или некорректных данных?
  3. В наиболее произвольном тесте найти все ссылки.
  4. Казалось, бы просто выделить все части текста, начинающиеся на http:// Но есть множество форматов записи адреса, и приведенный список – только верхушка айсберга.
  5. Читаем RFC – получаем регулярку 1. От 1-ого до 3-х внутренних доменов 2. Последний домен должен быть из списка TLD (Top-Level Domains) 3. Пути 4. Строка запроса 5. Хештег
  6. Ну, это надо протестировать. Давай придумывать тесты: раз строка, два строка, умф, пойду покурю, 10 строка, ррррррррр, что же еще придумать.... 15 строка: я сдаюсь
  7. В произвольное-произвольное место произвольной-произвольной строки вставляем произвольный-произвольный адрес. Пропускаем полученный текст через поиск адресов, вырезаем их – ничего не должно измениться.