SlideShare a Scribd company logo
Пример 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

PDF
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
PDF
Екатерина Войденко "Горизонтальное масштабирование MySQL"
PDF
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
PDF
Владислав Моргун
PDF
#noBackend, или Как выжить в эпоху толстеющих клиентов
PPTX
От 40 до 2 секунд
PDF
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
PDF
Database First! О распространённых ошибках использования РСУБД
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
Екатерина Войденко "Горизонтальное масштабирование MySQL"
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
Владислав Моргун
#noBackend, или Как выжить в эпоху толстеющих клиентов
От 40 до 2 секунд
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Database First! О распространённых ошибках использования РСУБД

What's hot (19)

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

Similar to Fuzz testing (20)

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

Fuzz testing

  • 1. Пример fuzz testing для поиска URL в тексте Николай Ходов ([email protected])
  • 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

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