moreweb
Исходник: Упражнение 52: moreweb
Переводчик: Феликс Ли
Лицензия: CC BY-NC-SA 4.0
Гордо использует Google Translate
Теперь вы создали веб-сервер с использованием библиотеки Python http.server
. Вы дошли до последнего проекта. Вы будете использовать всё, что узнали до этого момента, чтобы создать свой собственный веб-сервер с нуля. В упражнении 51 вы создали большую часть операций, которая находится "над" модулем http.server
. Вы не занимались никакой сетевой связью или анализом протокола HTTP. В последнем упражнении вы будете копировать все действия, выполненные в http.server
, и реализовывать все необходимые части для вашего сервера lessweb
.
Чтобы завершить это упражнение, вам потребуется прочитать документацию Python 3 asyncio
модуля. Этот модуль предоставляет вам инструменты для работы с запросами через сокеты, создания серверов, ожидания сигналов и всего остального, что вам может понадобиться. Если вы хотите взяться за дополнительный вызов, то вы можете использовать Python 3 select
модуль, который предоставляет более низкоуровневый API для работы со сокетами. Вам следует использовать эту документацию, чтобы создать ряд маленьких серверов и клиентов, работающих через сокеты.Как только вы поймёте, как создавать серверы и клиенты, которые работают через TCP/IP сокеты, вам придётся заняться обработкой HTTP запросов. Эта часть проекта будет очень сложной, так как стандарт HTTP сумасшедший и намного сложнее, чем требуется. Я начну с самого простого HTTP парсера, который вы сможете спроектировать, а затем буду расширять его по мере увеличения количества примеров. Первое место старта — RFC 7230, но будьте готовы столкнуться с одним из самых плохих написаний, которое люди когда-либо делали.Лучшим способом изучить RFC 7230 является первым извлечение всех грамматик, указанных в приложении "Обзор ABNF". На первый взгляд это кажется сумасшедшим, потому что это просто огромная грамматическая спецификация. Вы действительно уже научились читать такие вещи в пятой части этой книги, хотя они были меньше по размеру. Вы знаете, как работают регулярные выражения, сканеры и парсеры, и как читать такие грамматики. Все, что вам нужно сделать, это исследовать эту грамматику и реализовать её по частям. При реализации я полностью игнорирую любую "блочную" грамматику. Как только вы изучите этот синтаксис, вам следует начать писать парсер для HTTP, используя уже созданное вами. Используйте ваши данные структуры, парсинговые инструменты и любое другое необходимое, чтобы создать парсер для небольшого подмножества HTTP. Обрабатывайте как можно больше этого синтаксиса. Для помощи вам есть набор тестовых файлов, содержащих действительные HTTP-запросы; посетите https://learncodethehardway.org/more-python-book/http_tests.zip. Вы можете скачать этот набор тестовых примеров и запустить его через ваш парсер, чтобы убедиться, что он работает правильно. Я извлек многие из этих тестовых примеров из выдающегося сервера And-HTTP, а затем расширил их более простыми примерами. Ваша цель — сделать так, чтобы они прошли как можно большее количество тестов.Наконец, как только у вас будет способ написать хороший сервер сокетов asyncio
или select
, и способ парсинга HTTP, вы сможете объединить эти два подхода и создать свой первый полнофункциональный веб-сервер.
Вы должны попробовать сломать этот веб-сервер, но также стоит здесь экспериментировать с различными вещами. Вы уже создали парсер HTTP, попробуйте использовать парсер стиля RDP, чтобы наиболее эффективно обрабатывать действительные HTTP-запросы. Ваши парсеры имеют отличную возможность блокировать множество недействительных HTTP-запросов, поэтому найдите несколько старых атак и попробуйте их на своём веб-сервере. Есть несколько сайтов, где автоматизированные хакерские инструменты доступны для скачивания, поэтому получите один и направьте его на свой сервер. Но будьте осторожны и убедитесь, что вы запускаете известные тестовые инструменты и только на своём сервере.
moreweb
для создания веб-фреймворков. Я рекомендую сперва создать сайт, а затем извлекать нужные шаблоны из веб-фреймворка. Цель такого фреймворка заключается в том, чтобы упаковать использованные вами шаблоны, чтобы вы могли упрощать последующие веб-приложения. Как и в случае с практиками lessweb
и moreweb
, вашей целью должно быть исследование, реализация и использование общих методов защиты от атак веб-фреймворков.Если вы хотите углубиться в TCP/IP, я рекомендую книгу Джона Снадера «Effective TCP/IP Programming». «Эффективное программирование TCP/IP» написана на C, но фактически это "костыльное" обучение TCP/IP, которое охватывает 44 темы и предоставляет простой код для понимания основ работы TCP/IP. Язык C — родной язык TCP/IP, поэтому использование сокетов в других языках может показаться странным до тех пор, пока вы не узнаете, как это реализовано на C. Изучив эту книгу, вы сможете лучше понять работу сервера сокетов. Единственное предупреждение заключается в том, что эта книга несколько устарела, так что код должен работать, но он может не быть самым современным.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )