(1) Базовые знания сети
1) В чем разница между Http и Https?
Ответ: Протокол Http работает поверх TCP и передается в виде обычного текста, и ни клиент, ни сервер не могут проверить подлинность другой стороны; Https — это Http с оболочкой SSL (Secure Socket Layer), работающий на SSL и SSL, работающие на TCP, представляют собой HTTP с дополнительными механизмами шифрования и аутентификации. Различия между ними заключаются в следующем:
Разные порты: Http и Http используют разные способы подключения и используют разные порты: первый — 80, второй — 443;
Потребление ресурсов: по сравнению с HTTP-связью, Https-связь потребляет больше ресурсов ЦП и памяти из-за обработки шифрования и дешифрования;
Накладные расходы: для связи по протоколу HTTPS требуется сертификат, который, как правило, необходимо приобретать в центре сертификации;
Механизм шифрования HTTPS представляет собой гибридный механизм шифрования, который использует как шифрование с общим ключом, так и шифрование с открытым ключом.
2) Симметричное шифрование и асимметричное шифрование
отвечать:
Шифрование с симметричным ключом относится к методу использования одного и того же ключа для шифрования и дешифрования.Самой большой проблемой в этом методе является проблема передачи ключа, то есть как безопасно отправить ключ другой стороне;асимметричное шифрование относится к использованию из пары асимметричных ключей, то есть открытого и закрытого ключей, открытый ключ может быть выпущен по желанию, а вот закрытый ключ известен только вам. Сторона, отправляющая зашифрованный текст, использует открытый ключ другой стороны для обработки шифрования, и после того, как другая сторона получит зашифрованную информацию, она расшифрует ее, используя свой собственный закрытый ключ.
Поскольку метод асимметричного шифрования не требует отправки закрытого ключа для расшифровки, он может обеспечить безопасность, но по сравнению с симметричным шифрованием он очень медленный, поэтому мы по-прежнему используем симметричное шифрование для передачи сообщений, но симметричное шифрование использует ключ, который мы можем отправить через асимметричное шифрование.
3) Три рукопожатия и четыре волны
отвечать:
(1) Трёхстороннее рукопожатие (я хочу установить с вами связь, вы действительно хотите установить со мной связь, я действительно хочу установить с вами связь, успех)
Первое рукопожатие: Клиент устанавливает флаг SYN в 1, случайным образом генерирует значение seq=J и отправляет пакет данных на Сервер.Клиент входит в состояние SYN_SENT и ждет подтверждения от Сервера.
Второе рукопожатие: после того, как сервер получает пакет данных, бит флага SYN=1 знает, что клиент запрашивает установление соединения, и сервер устанавливает биты флага SYN и ACK в 1, ack=J+1 и случайным образом генерирует значение seq=K и отправить пакет Клиенту для подтверждения запроса на соединение, а Сервер переходит в состояние SYN_RCVD.
Третье рукопожатие: после того, как клиент получил подтверждение, он проверяет, соответствует ли подтверждение J+1 и равно ли ACK 1. Если все верно, бит флага ACK устанавливается в 1, подтверждение=K+1 и отправляется на сервер.Сервер проверяет, соответствует ли ACK K+1 и является ли ACK 1. Если он правильный, соединение устанавливается успешно.Клиент и сервер переходят в состояние ESTABLISHED, завершают трехэтапное рукопожатие , после чего клиент и сервер могут начать передачу данных.
(2) Четыре взмаха рук (отключаюсь от тебя; окей, давай разъединяемся. Я тоже от тебя отключаюсь; окей, давай разъединяемся):
Первая волна: клиент отправляет FIN,Используется для закрытия передачи данных от клиента к серверу, Клиент переходит в состояние FIN_WAIT_1.
Вторая волна: после того, как сервер получает FIN, он отправляет клиенту ACK, чтобы подтвердить, что серийный номер равен полученному серийному номеру + 1 (так же, как SYN, один FIN занимает один серийный номер), и сервер входит в CLOSE_WAIT. государство. В это время TCP-связь находится в полузакрытом состоянии, то есть у клиента нет данных для отправки, но если сервер отправляет данные, то клиенту все равно нужно их получить.
Третья волна: Сервер отправляет FIN,Используется для закрытия передачи данных с сервера на клиент., Сервер переходит в состояние LAST_ACK.
Четвертая волна: после того, как клиент получает FIN, клиент переходит в состояние TIME_WAIT, а затем отправляет ACK на сервер, подтверждая, что серийный номер равен полученному серийному номеру + 1, сервер переходит в состояние CLOSED и завершает четыре махал.
4) Почему для соединения TCP требуется трехстороннее рукопожатие, а не два?
Ответ: Целью «трехстороннего рукопожатия» является предотвращениеСообщение о неверном запросе ссылки внезапно снова отправляется на сервер, что приводит к ошибке.
Нормальная ситуация: A отправляет запрос на соединение, но не получает подтверждения, поскольку сообщение с запросом на соединение потеряно, поэтому A повторно передает запрос на соединение. Позже было получено подтверждение, и соединение было установлено. После завершения передачи данных соединение разрывается. Всего A отправляет два сегмента запроса на соединение, первый из которых потерян, а второй достигает B. Не существует «устаревшего сегмента запроса на подключение».
Теперь предположим, что возникла нештатная ситуация: то есть первый сегмент запроса на соединение, отправленный А, не потерян, а остается на определенном узле сети в течение длительного времени, так что задерживается до определенного времени после разрыва соединения , прибыть в Б. Первоначально это был давно несуществующий сегмент. Однако после того, как B получает недопустимый сегмент запроса на соединение, он ошибочно полагает, что это новый запрос на соединение, отправленный A снова. Таким образом, он отправляет сегмент подтверждения А и соглашается установить соединение.
Если предположить, что «трехстороннее рукопожатие» не используется, то пока B отправляет подтверждение, устанавливается новое соединение. Поскольку A не отправлял запрос на установление соединения сейчас, он проигнорирует подтверждение B и не будет отправлять данные B. Но B считает, что установлено новое транспортное соединение, и ждет, пока A отправит данные. Таким образом, многие ресурсы B тратятся напрасно. Подход «трехстороннего рукопожатия» может предотвратить возникновение описанного выше явления.
5) Зачем махать четыре раза?
Ответ: Протокол TCP — это ориентированный на установление соединения, надежный протокол связи транспортного уровня на основе потока байтов. TCP является полнодуплексным режимом, это означает, что когда A отправляет сегмент FIN в B, это просто означает, что у A нет данных для отправки, и в это время A все еще может получать данные от B; B отправляет A в A Сегмент ACK просто сообщает A, что он знает, что у A нет данных для отправки, но B все еще может отправить данные A.
Таким образом, для счастливого завершения разговора требуется четыре волны.
6) Как протокол TCP обеспечивает надежность передачи
Ответ: TCP предоставляет надежную службу потока байтов, ориентированную на соединение. Среди них ориентированный на соединение означает, что два приложения, использующие TCP (обычно клиент и сервер), должны установить TCP-соединение перед обменом данными друг с другом. В TCP-соединении только две стороны взаимодействуют друг с другом, в то время как служба потока байтов означает, что два приложения обмениваются потоком байтов из 8-битных байтов по каналу TCP, а TCP не вставляет идентификаторы записей в поток байтов.
Для надежности TCP гарантирует:
проверка пакетов: Цель состоит в том, чтобы обнаружить любые изменения в данных в процессе передачи. Если есть ошибка в проверке пакета, сегмент сообщения будет отброшен, и ответ не будет дан. В это время TCP повторно передаст данные после время окончания отправки данных истекло;
Переупорядочить неупорядоченные пакеты: Поскольку сегменты TCP передаются как дейтаграммы IP, а дейтаграммы IP могут приходить не по порядку, сегменты TCP также могут приходить не по порядку. TCP переупорядочивает неупорядоченные данные перед передачей их на прикладной уровень;
удалить повторяющиеся данные: дублирующиеся данные можно удалить;
механизм реагирования: когда TCP получает данные с другого конца TCP-соединения, он отправляет подтверждение. Это подтверждение не отправляется немедленно, обычно оно задерживается на долю секунды;
тайм-аут повторной передачи: Когда TCP отправляет сегмент, он запускает таймер и ожидает, пока пункт назначения подтвердит получение сегмента. Если подтверждение не может быть получено вовремя, сегмент будет отправлен повторно;
управление потоком: Каждая сторона соединения TCP имеет буферное пространство фиксированного размера. Сторона-получатель TCP позволяет другой стороне отправлять столько данных, сколько может вместить буфер получателя.Это предотвращает переполнение буфера более быстрого хоста более медленным хостом.Это управление потоком. Протокол управления потоком, используемый TCP, представляет собой протокол скользящего окна переменного размера.
7) Что произойдет, если клиент продолжит создавать ссылки для запросов? Атака DDos (распределенный отказ в обслуживании)?
Ответ: Сервер создаст ссылку на каждый запрос, отправит на него сообщение с подтверждением, а затем будет ждать подтверждения от клиента
(1) DDoS-атака:
Клиент отправляет пакет ссылки запроса на сервер
Сервер отправляет пакет подтверждения клиенту
Клиент не отправляет пакет подтверждения на сервер, и сервер ожидает подтверждения от клиента
(2) Предотвращение DDos: (полного излечения не существует, если не используется TCP)
Ограничьте количество одновременных открытых полулинков SYN
Сократите время ожидания полусоединения SYN
Отключите ненужные службы
8) В чем разница между GET и POST?
О: GET и POST — это два наиболее часто используемых HTTP-метода. Различия между ними в основном заключаются в следующих пяти аспектах:
(1) Функционально GET обычно используется для получения ресурсов с сервера, а POST обычно используется для обновления ресурсов на сервере;
(2) С точки зрения службы REST GET является идемпотентным, то есть при чтении одного и того же ресурса всегда получаются одни и те же данные, в то время как POST не является идемпотентным, поскольку каждый запрос не изменяет ресурс одинаково; Кроме того, GET не будет изменить ресурсы на сервере, а POST изменит ресурсы сервера;
(3) С точки зрения формы параметра запроса данные запроса GET будут прикреплены к URL-адресу, то есть данные запроса будут помещены в заголовок запроса HTTP-сообщения, а URL-адрес и данные передачи разделяются знаком ?, а параметры соединяются знаком &. В частности, если данные представляют собой английские буквы/цифры, они отправляются как есть; в противном случае они кодируются как строка MIME application/x-www-form-urlencoded (преобразуется в +, если это пробел, или +, если это является китайским/другим символом. Зашифруйте строку напрямую с помощью BASE64 и получите, например: %E4%BD%A0%E5%A5%BD, где XX в %XX – это ASCII символа в шестнадцатеричном формате); и запрос POST отправит Данные помещаются в тело запроса сообщения HTTP-запроса.
(4) С точки зрения безопасности, безопасность POST выше, чем у GET, потому что данные, отправленные запросом GET, будут отображаться в URL-адресе в виде обычного текста, а параметры запроса POST будут заключены в тело запроса, что относительно безопаснее.
(5) С точки зрения размера запроса длина запроса GET ограничена ограничением браузера или сервера на длину URL-адреса, а количество данных, разрешенных для отправки, относительно невелико, в то время как POST-запрос не имеет ограничений по размеру.
Почему URL-адрес закодирован в запросе GET?
Мы знаем, что незападные символы в URL-адресе будут закодированы в запросе GET, цель этого состоит в том, чтобыизбегать двусмысленности. См. пример ниже,
На примере «имя1=значение1&имя2=значение2» поговорим о процессе парсинга данных от клиента к серверу. Во-первых, приведенная выше строка представлена в ASCII на компьютере как:
6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532 6E616D6531:name1 3D:= 76616C756531:value1 26:& 6E616D6532:name2 3D:= 76616C756532:value2
После получения данных сервер может проходить поток байтов, съедая по одному байту за раз.Когда 3D-байт съеден, сервер знает, что предыдущий байт представляет собой ключ, а затем съедает, если вы встретите 26, это означает что от только что съеденного 3D до 26 подраздела есть значение предыдущего ключа, и так далее, можно парсить переданные клиентом параметры.
Теперь рассмотрим такой вопрос, а что если наше значение параметра содержит спецсимволы типа = или &? Например, «имя1=значение1», где значением значения1 является строка «va&lu=e1», тогда в процессе передачи оно фактически станет «name1=va&lu=e1». Таким образом, наше первоначальное намерение состояло в том, чтобы иметь только одну пару ключ-значение, но сервер разрешит ее в две пары ключ-значение, что создает двусмысленность.
Итак, как решить двусмысленность, вызванную вышеуказанными проблемами? Решение состоит в URL-кодировании параметров: например, мы URL-кодируем приведенные выше неоднозначные символы: «name1=va%26lu%3D», чтобы сервер поместил слово сразу после «%». Разделы обрабатываются как обычные байтов, то есть они не рассматриваются как разделители для отдельных параметров или пар ключ-значение.
9) Разница между TCP и UDP
Ответ: Протоколы TCP (протокол управления передачей) и UDP (протокол пользовательских дейтаграмм) относятся к протоколам транспортного уровня и отличаются между собой:
TCP ориентирован на установление соединения, UDP — без установления соединения;
TCP надежен, UDP ненадежен;
TCP поддерживает только связь «точка-точка», UDP поддерживает режимы связи «один-к-одному», «один-ко-многим», «многие-к-одному» и «многие-ко-многим»;
TCP ориентирован на байты, UDP — на пакеты;
TCP имеет механизм управления перегрузкой, UDP не имеет управления перегрузкой и подходит для медиакоммуникаций;
Служебные данные заголовка TCP (20 байтов) больше, чем служебные данные заголовка UDP (8 байтов);
10) Общие протоколы прикладного уровня, соответствующие TCP и UDP соответственно.
отвечать:
(1) Протокол прикладного уровня, соответствующий TCP:
FTP: определяет протокол передачи файлов с использованием порта 21. Часто говорят, что когда определенный компьютер открывает службу FTP, он запускает службу передачи файлов. Загрузите файлы, загрузите домашнюю страницу, используйте службу FTP.
Telnet: это порт, используемый для удаленного входа в систему. Пользователи могут удаленно подключаться к компьютеру под своим собственным именем. Через этот порт может быть предоставлена услуга связи на основе режима DOS. Например, предыдущая BBS — это чисто символьный интерфейс, и сервер, поддерживающий BBS, откроет порт 23 для предоставления услуг внешнему миру.
SMTP: определяет простой протокол передачи почты, который используется многими почтовыми серверами для отправки почты. Например, обычная бесплатная почта использует этот порт почтовой службы, поэтому в настройках электронной почты - вы часто видите такую колонку настроек порта SMTP, и сервер открывает порт 25.
POP3: соответствует SMTP, а для получения почты используется POP3. Обычно протокол POP3 использует порт 110. То есть, если у вас есть соответствующая программа, использующая протокол POP3 (например, Fo-xmail или Outlook), вы можете войти в интерфейс почтового ящика, не используя веб-режим, и вы можете напрямую использовать почтовую программу. для получения почты (если это почтовый ящик 163, нет необходимости сначала Заходить на сайт NetEase, а потом заходить в свой почтовый ящик для получения писем).
HTTP: Транспортный протокол для передачи гипертекста с веб-сервера в локальный браузер.
(2) Протокол прикладного уровня, соответствующий UDP:
DNS: используется службой разрешения доменных имен для преобразования адресов доменных имен в IP-адреса. DNS использует порт 53.
SNMP: Простой протокол управления сетью, использующий порт 161, используется для управления сетевыми устройствами. Поскольку существует так много сетевых устройств, услуги без установления соединения имеют свои преимущества.
TFTP(Trival File Transfer Protocal): Простой протокол передачи файлов, использующий сервисы UDP на общеизвестном порту 69.
11) Механизм предотвращения перегрузки TCP
отвечать:
Перегрузка: потребность в ресурсах превышает доступные ресурсы. Если предложение многих ресурсов в сети будет недостаточным одновременно, производительность сети будет значительно ухудшаться, а пропускная способность всей сети будет уменьшаться с ростом нагрузки.
Контроль перегрузки: предотвращает ввод слишком большого количества данных в сеть, чтобы маршрутизаторы или каналы в сети не были перегружены.
Методы борьбы с заторами:
(1) Медленный старт + предотвращение перегрузки:
медленный старт: Не отправляйте вначале большой объем данных, сначала определите уровень перегрузки сети, то есть постепенно увеличивайте размер окна перегрузки от маленького до большого;
предотвращение перегрузки: Алгоритм предотвращения перегрузки заставляет окно перегрузки медленно увеличиваться, то есть окно перегрузки cwnd для отправителя увеличивается на 1 вместо удвоения каждый раз, когда проходит время приема-передачи RTT, так что окно перегрузки медленно растет в соответствии с линейным законом.
(2) Быстрая повторная передача + быстрое восстановление:
быстрая ретрансляция: Быстрая повторная передача требует, чтобы получательсегмент вне очередивыдается сразу послеПовторить подтверждение(Для того, чтобы отправитель как можно скорее узнал, что сегмент не достиг другой стороны) вместо того, чтобы ждать, пока подтверждение будет добавлено при отправке данных само по себе. Алгоритм быстрой повторной передачи предусматривает, что, пока отправитель получает три повторных подтверждения подряд, он должен немедленно повторно передать сегмент, который не был получен другой стороной, не дожидаясь истечения установленного таймера повторной передачи.
быстрое восстановление: Быстрая повторная передача используется в сочетании с алгоритмом быстрого восстановления.Когда отправитель получает три повторных подтверждения подряд, выполняется алгоритм «кратного уменьшения» для уменьшения вдвое порога ssthresh, но алгоритм медленного запуска не выполняется следующим: если сеть перегружена, она не получит несколько дубликатов подтверждений, поэтому теперь отправитель считает, что сеть не может быть перегружена. Таким образом, вместо выполнения алгоритма медленного запуска в это время установите cwnd на размер ssthresh, а затем выполните алгоритм предотвращения перегрузки.
12) Что произошло после ввода: «www.xxx.com» в браузере? Пожалуйста, дополните.
Анализ: Классическая проблема сетевого протокола.
отвечать:
Процесс поиска IP-адреса из доменного имени → IP-адрес проходит через кеш браузера, системный кеш, файл hosts, кеш маршрутизатора и рекурсивно ищет корневой сервер имен доменов.
Установить соединение TCP/IP (специфический процесс трехстороннего рукопожатия)
HTTP-запрос, отправленный браузером
После перенаправления маршрутизатором через брандмауэр сервера HTTP-запрос достигает сервера.
Сервер обрабатывает HTTP-запрос и возвращает HTML-файл.
Браузер анализирует файл HTML и отображает его на стороне браузера.
Обратите внимание:
Протокол HTTP — это протокол прикладного уровня, основанный на TCP/IP. Чтобы сделать запрос данных HTTP, сначала необходимо установить соединение TCP/IP.
Это можно понять так: HTTP — это машина, которая обеспечивает определенную форму инкапсуляции или отображения данных; Socket — это движок, обеспечивающий возможность сетевого взаимодействия.
Связь между двумя компьютерами — это не что иное, как передача данных между двумя портами, и конкретные данные будут отображаться в том виде, в каком форма определяется различными протоколами прикладного уровня.
13) Что такое протокол HTTP без сохранения состояния? Как решить протокол Http без сохранения состояния?
Ответ: HTTP является протоколом без сохранения состояния, то есть у него нет памяти, а значит, каждый запрос независим, а отсутствие состояния означает, что если для последующей обработки требуется предыдущая информация, ее необходимо передать повторно, что может привести к каждый запрос.Объем данных, передаваемых вторичным соединением, увеличивается. С другой стороны, когда серверу не нужна предыдущая информация, его ответ будет быстрым.
Эта функция HTTP имеет свои преимущества и недостатки:
преимущество: освобождает сервер, и каждый запрос «дожимается до конца», не вызывая ненужного занятия соединения
недостаток: каждый запрос будет передавать много повторяющейся информации о содержимом, и обмен данными между запросами невозможен.
решение:
Используйте механизм передачи параметров:
Объедините параметры за запрошенным URL-адресом для реализации передачи данных (метод GET), например:/param/list?username=wmyskxz
проблема: Это может решить проблему обмена данными, но этот метод небезопасен, а допустимый объем передачи данных составляет всего 1 КБ.Использование технологии cookie
Использование сеансовой технологии
14) Сессия, файлы cookie и приложение
Ответ: И файлы cookie, и сеансы — это решения для поддержания состояния между клиентом и сервером.
(1) Файлы cookie и связанные с ними API:
Файл cookie на самом деле представляет собой небольшой фрагмент текстовой информации. Клиент запрашивает сервер. Если серверу необходимо записать статус пользователя, он использует ответ для выдачи файла cookie браузеру клиента, и браузер клиента сохраняет файл cookie. Когда браузер снова запрашивает веб-сайт, браузер отправляет запрошенный URL-адрес вместе с файлом cookie на сервер, и сервер проверяет файл cookie, чтобы определить статус пользователя. Сервер также может изменить содержимое файла cookie по мере необходимости.
(2) Сеанс и связанные с ним API:
Точно так же состояние сеанса также может быть сохранено на стороне сервера. Клиент запрашивает сервер. Если сервер записывает состояние пользователя, он получает сеанс для сохранения состояния. В это время, если сервер создал сеанс для клиента, сервер извлекает сеанс в соответствии с идентификатором сеанса и использует его. ; если запрос клиента не содержит идентификатора сеанса, то создайте сеанс для этого клиента и сгенерируйте идентификатор сеанса, связанный с этим сеансом, и верните этот идентификатор сеанса клиенту для сохранения в этом ответе. Способ сохранения этого sessionid может бытьмеханизм cookie, чтобы браузер мог автоматически отображать этот идентификатор на сервер по правилам в процессе взаимодействия, если браузер отключил куки, вы можете использоватьМеханизм перезаписи URLПередайте sessionid обратно на сервер.
(3) Сравнение сеанса и файла cookie:
Механизм реализации: Реализация Session часто зависит от механизма Cookie, и SessionID возвращается через механизм Cookie;
предельный размер: файл cookie имеет ограничение по размеру, и браузер также имеет ограничение на количество файлов cookie для каждого сайта.Сессия не имеет ограничения по размеру, теоретически связанного только с объемом памяти сервера;
безопасность: Cookie имеет потенциальную угрозу безопасности.После того, как файл cookie будет обнаружен с помощью перехвата или локальных файлов, он может быть атакован, а сессия относительно безопаснее, поскольку она хранится на стороне сервера;
Потребление ресурсов сервера: сеанс хранится на сервере и будет существовать в течение определенного периода времени, прежде чем исчезнет.Если сеансов слишком много, это увеличит нагрузку на сервер.
(4).Применение:
Приложение (ServletContext): соответствует веб-приложению и предоставляет глобальное состояние для приложения, которое могут использовать все клиенты.
15) Механизм раздвижного окна
Ответ: отправитель и получатель сообщают друг другу максимальный объем данных, который они могут получить во время фазы трехэтапного рукопожатия. То есть размер собственного буферного пула приема данных. Таким образом, другая сторона может рассчитать, может ли она продолжить отправку в соответствии с объемом отправленных данных. Во время обработки при изменении размера принимающего буферного пула другой стороне должно быть отправлено уведомление об обновлении размера окна. Это обеспечивает управление потоком.
16) Каковы наиболее часто используемые методы HTTP?
отвечать:
GET: используется для запроса доступа к ресурсу, идентифицированному URI (унифицированным идентификатором ресурса), который может быть передан на сервер через URL-адрес.
POST: используется для передачи информации на сервер, основная функция аналогична методу GET, но обычно рекомендуется метод POST.
PUT: передача файла, тело сообщения содержит содержимое файла и сохраняет его в соответствующем месте URI.
HEAD: Получить заголовок сообщения, аналогично методу GET, за исключением того, что он не возвращает тело сообщения.Обычно используется для проверки правильности URI.
DELETE: удаляет файл, в отличие от метода PUT, удаляет файл в соответствующем месте URI.
ВАРИАНТЫ: Запрос методов HTTP, поддерживаемых соответствующим URI.
17) Общие коды состояния HTTP
отвечать:
1xx (предварительный ответ)
2xx (успех)
3xx (перенаправление): указывает, что для выполнения запроса требуются дальнейшие действия.
4xx (ошибка): указывает на то, что запрос мог быть ошибочным, поэтому сервер не может его обработать.
5xx (ошибка сервера): указывает, что сервер обнаружил внутреннюю ошибку при попытке обработать запрос.
Общие коды состояния:
200 (успех)
304 (не изменено): запрошенная страница не была изменена с момента последнего запроса. Когда сервер возвращает этот ответ, содержимое веб-страницы не возвращается.
401 (неавторизованный): запрос требует аутентификации
403 (Запрещено): сервер отклонил запрос
404 (не найдено): сервер не может найти запрошенную веб-страницу.
18) SQL-инъекция
О: SQL-инъекция предназначена для того, чтобы заставить сервер выполнять вредоносные SQL-команды путем вставки SQL-команд в отправку веб-формы или ввода строки запроса доменного имени или запроса страницы.
(1) Общая идея атаки SQL-инъекцией:
Найти место SQL-инъекции
Определите тип сервера и тип фоновой базы данных
Атаки с внедрением SQL-кода, нацеленные на необычные функции сервера и базы данных
(2) Примеры атак с использованием SQL-инъекций:
Например, в интерфейсе входа, который требует ввода имени пользователя и пароля, вы можете ввести следующее, чтобы войти в систему без учетной записи:
用户名: ‘or 1 = 1 --密 码:
После того, как пользователь щелкнет, чтобы войти в систему, если не будет сделано никаких специальных действий, нелегальный пользователь войдет в систему с гордостью. Почему это так? Давайте проанализируем это: Теоретически, в фоновой программе аутентификации будут следующие операторы SQL:
String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”;
Следовательно, когда вводятся указанные выше имя пользователя и пароль, указанный выше оператор SQL становится следующим:
SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’
Анализируя приведенный выше оператор SQL, мы знаем, что оператор username=' или 1=1 будет успешным; затем добавьте два -, что означает комментарий, он прокомментирует следующие операторы, чтобы они не работали. Таким образом, приведенное выше утверждение всегда может быть выполнено правильно, и пользователь может легко обмануть систему и получить юридическую личность.
(3) Методы преодоления:
1. Привязка параметров:
Используя предварительно скомпилированные средства, привязка параметров — лучший способ предотвратить SQL-инъекцию. В настоящее время во многих ORM-фреймворках и JDBC реализованы функции предварительной компиляции SQL и привязки параметров.Вредоносный SQL злоумышленника будет выполняться как параметры SQL, а не команды SQL. В файле сопоставления mybatis мы обычно используем # и
不能识别此Latex公式:来获取参数值。当使用#时,变量是占位符,就是一般我们使用javajdbc的PrepareStatement时的占位符,所有可以防止sql注入;当使用
Когда переменная напрямую добавляется к sql, обычно возникает проблема внедрения sql.
2. Используйте регулярные выражения для фильтрации входящих параметров
19) XSS-атака
О: XSS — это уязвимость компьютерной безопасности, которая часто появляется в веб-приложениях. Вместе с внедрением SQL она стала самым распространенным методом атак в Интернете. XSS относится к тому факту, что злоумышленники пользуются отсутствием экранирования на веб-сайте или недостаточной фильтрацией данных, отправленных пользователями, а затем добавляют некоторый код сценария, чтобы встроить его в веб-страницу, чтобы другие пользователи выполняли соответствующий встроенный код, когда доступ с целью кражи Метод атаки, использующий информацию о пользователе, использует личность пользователя для выполнения определенных действий или проводит вирусные атаки на посетителей.
(1) Вред XSS-атаки:
Кража различных учетных записей пользователей, таких как учетные записи для входа в систему, учетные записи пользователей онлайн-банкинга и различные учетные записи администраторов.
Контроль над корпоративными данными, включая возможность чтения, изменения, добавления и удаления конфиденциальных корпоративных данных.
Кража важной и коммерчески ценной информации у компании
незаконная передача
Электронная почта принудительно
Висячая лошадь на сайте
Контролируйте компьютер жертвы, чтобы запускать атаки на другие веб-сайты
(2) Анализ причин:
основная причина: Слишком большое доверие к данным, представленным клиентом!
Решение: не доверяйте данным, отправленным любым клиентом, если данные, отправленные клиентом, должны быть соответствующим образом отфильтрованы, прежде чем переходить к следующему шагу.
Подробности дальнейшего анализа: данные, отправленные клиентом, изначально требуются приложению, но злоумышленники используют доверие веб-сайта к данным, отправленным клиентом, чтобы вставить в данные некоторые символы и код javascript, после чего эти данные станут частью кода приложения. Тогда злоумышленник может начать атаку недобросовестно, поэтому мы никогда не должны доверять данным, представленным любым клиентом! ! !
(3) Классификация XSS-атак:
1. Отражающая XSS-атака (непостоянная XSS-атака):
Уязвимость возникает из-за того, что введенные злоумышленником данные отражаются в ответе. Типичная непостоянная XSS-атака состоит из ссылки с вектором XSS-атаки (т. е. каждая атака требует клика пользователя), например, при обычной отправке сообщения:
http://www.test.com/message.php?send=Hello,World!
Получатель получит сообщение и отобразит Hello, World, однако сообщение не будет отправлено нормально:
http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!
Когда получатель получит сообщение, появится всплывающее окно с предупреждением!
2. Постоянная XSS-атака (сценарий доски объявлений):
Векторы атаки XSS (обычно называемые кодом атаки XSS) хранятся в базе данных веб-сайта и выполняются, когда пользователь открывает страницу. То есть скрипт выполняется каждый раз, когда пользователь открывает указанную страницу в браузере. Постоянные XSS-атаки более опасны, чем непостоянные XSS-атаки. Как видно из названия, постоянная XSS-атака заключается в сохранении кода атаки в базе данных, а затем выполнении кода атаки при открытии клиента.
Например, поля формы в форме доски объявлений:
<input type=“text” name=“content” value=“这里是用户填写的数据”>
Нормальный процесс работы: пользователь отправляет соответствующую информацию о сообщении - сохраняет данные в базе данных - другие пользователи получают доступ к доске объявлений, приложение удаляет данные и отображает их; ненормальный процесс работы заключается в том, что злоумышленник заполняет ценность:
<script>alert(‘foolish!’);</script> <!--或者html其他标签(破坏样式)、一段攻击型代码-->
Отправьте и сохраните данные в базе данных; когда другие пользователи извлекут данные и отобразят их, эти оскорбительные коды будут выполнены.
(4) Политика исправления уязвимостей:
Основной причиной уязвимости являетсяСлишком большое доверие к данным, представленным пользователями, в результате недостаточной фильтрации данных, представленных пользователями., поэтому решение также должно начинаться с этого аспекта, а конкретные решения включают в себя:
Отметьте важные файлы cookie только как http, чтобы оператор document.cookie в Javascript не мог получить файл cookie (если в файле cookie установлен атрибут HttpOnly, информация о файлах cookie не может быть прочитана через сценарий js, что может эффективно предотвратить атаки XSS);
Данные формы определяют тип значения, например: age должен быть только int, name должен быть только буквенно-цифровой комбинацией. . . .
Html Encode обработка данных
Отфильтруйте или удалите специальные HTML-теги, например:
<script>
,<iframe>
,< for <
,> for>
," for
Теги, фильтрующие события JavaScript, такие как onclick=", onfocus и т. д.
Следует отметить, что в некоторых приложениях допускается появление html-тегов и даже javascript-кодов. Поэтому при фильтрации данных нужно тщательно анализировать, к каким данным предъявляются особые требования (например, для вывода требуется html-код, сращивание кода javascript, или эта форма напрямую разрешена к использованию и т. д.), а затем поступать с этим по-другому!
20) Сетевая архитектура OSI и модель протокола TCP/IP.
Ответ: OSI — это теоретическая модель сетевого взаимодействия, а TCP/IP — фактический стандарт сетевого взаимодействия. Однако их первоначальные намерения одинаковы, так что два компьютера могут точно понимать друг друга и элегантно реагировать, как два близких друга. Теперь мы кратко представим каждый уровень семиуровневой модели OSI:
1).Физический уровень
Самый нижний уровень эталонной модели также является первым уровнем модели OSI, который реализует прозрачную передачу битовых потоков между соседними компьютерными узлами и максимально скрывает различия между конкретными средами передачи и физическими устройствами, так что верхний уровень уровень (канал передачи данных) уровень) не должны заботиться о конкретной среде передачи сети.
2). Канальный уровень
Получает данные в виде битового потока с физического уровня, инкапсулирует их в фрейм и передает на верхний уровень; аналогично также дизассемблирует и дизассемблирует фрейм данных с верхнего уровня на данные в виде бита поток и перенаправляет его на физический уровень. На основе битового потока, предоставляемого физическим уровнем, этот уровень использует методы контроля ошибок и управления потоком, чтобы превратить подверженную ошибкам физическую линию в безошибочный канал передачи данных, то есть обеспечить надежный метод передачи данных через физической среде.
3).Сетевой уровень
Сетевой адрес транслируется в соответствующий физический адрес, и для пакета выбирается наиболее подходящий путь через коммуникационную подсеть с помощью алгоритма маршрутизации.
4).Транспортный уровень (транспортный уровень)
Обеспечьте надежную и прозрачную передачу данных между источником и получателем, чтобы пользователям услуг верхнего уровня не приходилось беспокоиться о деталях реализации коммуникационной подсети. В стеке протоколов транспортный уровень расположен над сетевым уровнем.Протокол транспортного уровня обеспечивает логическую связь для процессов, работающих на разных хостах, а протокол сетевого уровня обеспечивает логическую связь для разных хостов, как показано на следующем рисунке.
Фактически сетевой уровень можно рассматривать как часть транспортного уровня, который предоставляет услуги транспортному уровню. Но для конечных систем сетевой уровень для них прозрачен, они знают о существовании транспортного уровня, то есть логически думают, что транспортный уровень обеспечивает им сквозную связь, что также является многоуровневой идеей. этого.
5) Сеансовый уровень
Сеансовый уровень — это пятый уровень модели OSI, представляющий собой интерфейс между пользовательским приложением и сетью, отвечающий за установление, поддержание и завершение связи между двумя узлами в сети.
6) Уровень представления: кодирование данных, сжатие и распаковка, шифрование и дешифрование данных.
Уровень представления — это шестой уровень модели OSI, который интерпретирует команды и данные с прикладного уровня, чтобы гарантировать, что информация, отправленная прикладным уровнем одной системы, может быть прочитана прикладным уровнем другой системы.
7) Прикладной уровень: предоставляет услуги сетевой связи для пользовательского прикладного процесса.
21) Как работает протокол ARP на сетевом уровне?
Ответ: Протокол разрешения адресов (ARP) — чрезвычайно важный протокол сетевой передачи в пакете сетевых протоколов, который находит адрес канального уровня путем анализа адреса сетевого уровня.
Протокол ARP на сетевом уровне завершает сопоставление IP-адресов и физических адресов.. Во-первых, каждый хост создает список ARP в своем собственном буфере ARP для представления соответствия между IP-адресами и MAC-адресами. Когда узлу-источнику необходимо отправить пакет данных узлу-получателю, он сначала проверит, есть ли MAC-адрес, соответствующий IP-адресу, в его списке ARP: если да, он отправит пакет данных напрямую на этот MAC-адрес; если нет, он отправит широковещательный пакет запроса ARP в сегмент локальной сети, чтобы запросить MAC-адрес, соответствующий хосту назначения. Пакет запроса ARP включает IP-адрес исходного хоста, аппаратный адрес и IP-адрес целевого хоста. После того, как все узлы в сети получат этот запрос ARP, они проверят, совпадает ли IP-адрес назначения в пакете данных с их собственным IP-адресом. Если они не совпадают, игнорируйте пакет данных; если они совпадают, хост сначала добавляет MAC-адрес и IP-адрес отправителя в свой собственный список ARP. Если информация об IP-адресе уже существует в таблице ARP, он перезапишет ее. , а затем отправить Хост отправляет ответный пакет ARP, чтобы сообщить другой стороне, что это MAC-адрес, который ей нужно найти; после того, как хост-источник получает ответный пакет ARP, он добавляет IP-адрес и MAC-адрес хоста назначения свой собственный список ARP и используйте эту информацию, чтобы начать передачу данных. Если хост-источник никогда не получал ответный пакет ARP, это означает, что запрос ARP завершился неудачно.
22) Классификация IP-адресов
Ответ: Весь Интернет представляет собой единую абстрактную сеть. IP-адрес предназначен для назначения уникального в мире 32-битного идентификатора каждому интерфейсу каждого хоста (или маршрутизатора) в Интернете.Это логический адрес для маскировки разницы в физических адресах. Схема адресации IP-адресов делит пространство IP-адресов на пять классов: A, B, C, D и E. Среди них A, B и C являются базовыми классами, а классы D и E используются как многоадресные и зарезервированные, и являются специальными адресами.
Каждый IP-адрес включает два идентификационных кода (ID), идентификатор сети и идентификатор хоста. Все узлы в одной физической сети используют один и тот же идентификатор сети, а узел в сети (включая рабочие станции, серверы и маршрутизаторы в сети) имеет соответствующий ему идентификатор узла. Характеристики адресов класса A~E следующие:
Адрес класса A: начните с 0, диапазон первого байта: 0~127;
Адрес класса B: начните с 10, диапазон первых байтов: 128~191;
Адрес класса C: начните со 110, диапазон первых байтов: 192~223;
Адрес класса D: начинается с 1110, а первый байт находится в диапазоне от 224 до 239;
Адрес класса E: начните с 1111, зарезервированный адрес
1) Адрес класса A: 1-байтовый сетевой адрес + 3-байтовый адрес хоста, старший бит сетевого адреса должен быть равен «0».
IP-адрес класса А означает, что среди четырехсегментных чисел IP-адреса первый сегмент номера — это номер сети, а остальные трехсегментные числа — это номера локального компьютера. Если IP-адрес представлен в двоичном формате, IP-адрес класса A состоит из 1-байтового сетевого адреса и 3-байтового адреса узла, а старший бит сетевого адреса должен быть равен «0». В IP-адресе класса А длина идентификации сети составляет 8 бит, а длина идентификации хоста — 24 бита.Количество сетевых адресов класса А невелико, существует 126 сетей, и каждая сеть может вместить более 16 миллионов хосты.
IP-адреса класса A находятся в диапазоне от 1.0.0.0 до 127.255.255.255 (в двоичном формате: 00000001 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111), последний адрес является широковещательным. Маска подсети IP-адреса класса A — 255.0.0.0, а максимальное количество хостов, поддерживаемых каждой сетью, — 256 в степени 3 -2 = 16777214.
2) Адрес класса B: 2-байтовый сетевой адрес + 2-байтовый адрес хоста, старший бит сетевого адреса должен быть «10».
IP-адрес класса B означает, что среди четырех сегментов IP-адреса первые два сегмента являются номером сети. Если IP-адрес представлен в двоичном формате, IP-адрес класса B состоит из 2-байтового сетевого адреса и 2-байтового адреса хоста, а старший бит сетевого адреса должен быть «10». Длина сетевого идентификатора в IP-адресе класса B составляет 16 бит, а длина идентификатора хоста — 16 бит.Сетевой адрес класса B подходит для сетей среднего размера.Сетей 16 384, а количество компьютеров что каждая сеть может вместить более 60 000 башен.
Диапазон IP-адресов класса B — 128.0.0.0-191.255.255.255 (двоичное представление: 10000000 00000000 00000000 00000000—-10111111 11111111 11111111 11111111), а последний — широковещательный адрес. Маска подсети IP-адреса класса B — 255.255.0.0, а максимальное количество хостов, поддерживаемых каждой сетью, — 256-2=65534.
3) Адрес класса C: 3-байтовый сетевой адрес + 1-байтовый адрес хоста, старший бит сетевого адреса должен быть «110».
IP-адрес класса C означает, что в четырехсегментном номере IP-адреса первые три сегмента номера — это номер сети, а оставшийся сегмент номера — это номер локального компьютера. Если IP-адрес представлен в двоичном формате, IP-адрес типа C состоит из 3-байтового сетевого адреса и 1-байтового адреса хоста, а старший бит сетевого адреса должен быть «110». Длина идентификатора сети в IP-адресе класса С составляет 24 бита, а длина идентификатора хоста — 8 бит.Количество сетевых адресов класса С составляет более 2,09 млн сетей. Подходит для небольших локальных сетей, каждая сеть может содержать до 254 компьютеров.
Диапазон IP-адресов класса C: 192.0.0.0-223.255.255.255 (двоичное представление: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111). Маска подсети IP-адреса класса C — 255.255.255.0, а максимальное количество хостов, поддерживаемых каждой сетью, — 256-2=254.
4) Адрес класса D: многоадресный адрес, используемый для связи «1 ко многим», старший бит должен быть «1110».
IP-адреса класса D исторически назывались групповыми адресами или многоадресными адресами. В Ethernet многоадресный адрес именует группу станций в сети, которые должны получать пакет от приложения. Старшим битом многоадресного адреса должно быть «1110», которое находится в диапазоне от 224.0.0.0 до 239.255.255.255.
5) Адрес класса E: для зарезервированного адреса старший бит должен быть «1111».
23) IP-адрес и физический адрес
Ответ: Физический адрес — это адрес, используемый канальным уровнем и физическим уровнем, а IP-адрес — это адрес, используемый сетевым уровнем и вышеперечисленными уровнями.Это логический адрес.Протокол ARP используется для соответствия. между IP-адресами и физическими адресами.
24) Какие факторы влияют на передачу по сети?
A: Время, необходимое для правильной передачи части данных из одного места в другое, называется временем отклика. Есть много факторов, влияющих на это время отклика.
Пропускная способность сети: так называемая пропускная способность — это максимальное количество битов, которое физическое соединение может передать в течение 1 с.Обратите внимание, что здесь указано количество бит (бит), а не количество байтов, то есть бит/с. Пропускная способность сети, безусловно, является ключевым звеном, влияющим на передачу данных, поскольку в текущей сетевой среде средняя пропускная способность сети составляет всего около 1,7 МБ/с.
Расстояние передачи: то есть расстояние, которое данные должны пройти в волокне.Хотя свет распространяется очень быстро, у него также есть время.Поскольку данные не двигаются по волокну по прямой линии, будет показатель преломления , так что это, вероятно, 2/3 света, это время мы обычно называем задержкой передачи. Задержка передачи является неизбежной проблемой.Например, если вы хотите синхронизировать операции с данными в базе данных в двух компьютерных залах в Ханчжоу и Циндао, задержка должна составлять около 30 мс.
Контроль перегрузки TCP: мы знаем, что передача TCP представляет собой протокол "стоп-ожидание-стоп-ожидание". Передатчик и получатель должны синхронизироваться друг с другом. Чтобы достичь того же шага, необходимо использовать контроль перегрузки для настройки. TCP установит «окно» во время передачи. Размер этого окна определяется пропускной способностью и RTT (время приема-передачи, время приема-передачи данных на обоих концах, то есть время отклика). Формула для расчета: пропускная способность (бит/с) x RTT (с). С помощью этого значения можно получить теоретический оптимальный размер буфера TCP. Linux 2.4 может автоматически регулировать размер буфера на стороне отправителя, а в Linux 2.6.7 сторона получателя также может автоматически регулировать размер буфера.
Источник статьи:www.liangsonghua.me
Обратите внимание на общедоступную учетную запись WeChat: отчет о консервированных яйцах Songhua Preserved Egg на доске, становитесь более захватывающим!
Введение в общедоступную учетную запись: делитесь техническими знаниями о работе на JD.com, а также технологиями JAVA и лучшими отраслевыми практиками, большинство из которых являются прагматичными, понятными и воспроизводимыми.