Сначала нам надо узнать, как можно определить ошибки, которые возникают при вызове сетевых функций. Правильная обработка ошибок для любого приложения является самым важным, потому что это повышает надежность программы и меняет отношение пользователей к вам или вашей фирме. Мы об этом уже говорили достаточно подробно, а сейчас изучим тему надежности программирования сетевой библиотеки. Хотя сетевые функции не могут сделать ничего критического для ОС, они могут повлиять на неправильный ход работы программы, что в свою очередь, может привести даже к краху системы. Из-за неправильно написанной обработки ошибок я видел даже крах Windows ХР, которая достаточно устойчива к сбоям.

Самое главное: при нарушении хода выполнения программы появляется вероятность снижения надежности системы и появления "лазеек" для взломщиков,, что приведет к взлому системы по сети. Чтобы этого не произошло, нужно проверять выполнение функций на ошибки и реагировать на них соответствующим образом. Данная задача не такая простая, и нельзя обойтись только блоком try._except.

Сетевые приложения обмениваются данными со сторонними компьютерами, а это значит, что клиентом может выступить злоумышленник, который отправит нам заведомо неправильные данные с целью нарушить работоспособность удаленной системы. Если не обработать ошибку, то взломщик получит доступ к тем данным или функциям, которые не должны быть доступны для него.

Рассмотрим простейший пример. У вас есть функция, которая вызывается каждый раз, когда программе пришли данные. Если пользователь прислал какие-то запросы, то они проверяются на корректность и права доступа к определенным данным. Если данные получены правильно, то функция выполняет критический код, который не должен быть доступен злоумышленнику. Злоумышленник может отправить запросы, нарушающие работу получения данных или проверки корректности. Именно из-за такой ошибки хакер может проникнуть в вашу систему и получить доступ к закрытой информации.

Проверка должна происходить на каждом этапе выполнения сетевых функций, отслеживания их корректности и доступности. Помните, что это придаст вашей программе не только стабильность, но и надежность и безопасность всей системы в Целом.

Если во время выполнения какой-то сетевой функции произошла ошибка, то большинство из них вернет константу S0CKETERR0R или значение -1. При получении такого значения можно применить функцию WSAGetLastError. Ей не надо передавать параметры, потому что функция возвращает код ошибки, происшедшей во время выполнения последней сетевой операции. Кодов ошибок очень много, и они могут зависеть от функции, которая отработала последней. EJ дальнейшем мы будем рассматривать их по мере необходимости.

Не оставляйте проверку ошибок на потом. Узнать причину ошибки с помощью WSAGetLastError можно только для последней выполненной операции.

Наиболее критичными для обработки являются функции получения данных, пришедших по сети. Всегда проверяйте размер данных и выделяйте достаточно памяти для сохранения полученных пакетов. Переполнение буфера - наиболее распространенная ошибка программиста, которой пользуются хакеры.

Вы можете заведомо предположить, что пакеты, приходящие по сети, будут иметь размер в 4 Кбайт, и выделить соответствующий блок памяти. Это может быть верным только при корректной работе. Если хакер отправит вам 100 Кбайт, а вы попытаетесь записать эти данные в буфер из 4 Кбайт, то это может привести к краху. Как это происходит? Посмотрим на следующую структуру программы:

в код программы;

в область памяти размером в 20 Кбайт; в код программы.

Допустим, что наш буфер из 4 Кбайт находится внутри области памяти из 20 Кбайт. Помимо буфера в этой области хранятся еще какие-то переменные. Когда мы записываем в свой буфер 100 Кбайт, то происходит перекрытие, а данные выходят за пределы области допустимой памяти и перезаписывают код программы. Таким образом, вместо корректного кода программы будет бесполезный "мусор", а может быть даже зловредный код. Посмотрим на следующую структуру программы:

в корректный код программы;
в область памяти размером в 20 Кбайт;
в как минимум 80 Кбайт кода будет "затерто";

в корректный код программы.

В область размером 80 Кбайт может попасть зловредный код с разрушительными действиями. Ваша программа попытается выполнить этот код, что может привести к нежелательным последствиям.

4.1. Основы WinSock || Оглавление || 4.3. Загрузка и выгрузка сетевой библиотеки


Delphi в шутку и всерьез: что умеют хакеры



Новости за месяц

  • Декабрь
    2021
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31