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

More from MoscowDjango (11)

PDF
Тестирование и Django
PDF
TDD или как я стараюсь писать код
PPTX
Cyclone + Eventsource (realtime push-сообщения)
PPT
Производительность в Django
PDF
Django на Android
PDF
Работа со статикой в Django
PPTX
Разработка расширяемых приложений на Django
PPTX
Class Based Generic Views в Django
PPTX
Простой и удобный деплоймент проекта
PPT
Django South. Миграция баз данных.
PDF
Журнальная вёрстка в Django
Тестирование и Django
TDD или как я стараюсь писать код
Cyclone + Eventsource (realtime push-сообщения)
Производительность в Django
Django на Android
Работа со статикой в Django
Разработка расширяемых приложений на Django
Class Based Generic Views в Django
Простой и удобный деплоймент проекта
Django South. Миграция баз данных.
Журнальная вёрстка в Django
Ad

Пример fuzzy testing для поиска URL в тексте

  • 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. Применимость ● Применим на стыках взаимодействия программ (форматы файлов, передача данных, внешние события) ● Очень сильно помогает выявить на раннем этапе то, что может “завалить” программу в боевом режиме