Jump to content
Search In
  • More options...
Find results that contain...
Find results in...



#0
Guest

Твое меню


Вход

Sign In



Регистрация

Меню форума


Recommended Posts

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

1.jpg.84de797420a163a44d80cce0876e8847.jpg

Переполнение буфера

Исторически одна из самых опасных ошибок. Именно благодаря ей на свет появились черви Морриса и Nimda, которые в сумме заразили несколько миллиардов персональных компьютеров. Суть ошибки проста: из-за неправильного вычисления позиций записи в память пользователь может внести данные «за пределы» буфера. В лучшем случае, это приведёт к ошибке, а потенциально – к тому, что хакер добавит в исполняемый код «вредоносные» вставки.

SQL-инъекция

SQL инъекция – хакерская атака, позволяющая получить им прямой доступ к базе данных. Используя простую конкатенацию SQL-команд, злоумышленники считывают базы данных, удаляют и добавляют данные, устанавливают собственные ссылки.

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

Инъекции команд ОС

Некоторое программное обеспечение использует встроенные команды операционной системы, например, для извлечения данных компьютера или запуска приложения. В этом случае, здесь может возникнуть схожая ошибка – инъекции команд вашей ОС. Без надлежащей проверки введённых данных, злоумышленник получает возможность влезть в ваш компьютер, изменить разрешения файлов, установить приложение, украсть данные или удалить что-то важное. Как это происходит – представляют более-менее все, кто хоть раз имел дело с компьютерным вирусом.

Переполнение числовых типов

Любой тип в любом языке программирования имеет свои пределы. Например, в 2-байтовое число без знака вы можете записать максимум 65535. Теперь представьте, что вам надо сложить 2 числа этого типа 65530 и 20.

Результат 65555 не впишется в тип short, а на выходе вы получите непредсказуемое значение. Таким образом, дальнейшая работа с этой переменной приведёт к заведомо неправильному результату и соответственно к неправильной работе прикладной программы.

Неправильная оценка размера массива

Бытует стереотип, что ошибки доступа к несуществующему индексу массива возможны только в C или C++, так как здесь используется ручное управление памятью. Это не так: в Java, Python, JavaScript и других «автоматических» языках подобные просчёты разработчика – не редкость. При неправильной оценке индекса массива пользователь получает доступ к неиспользуемым ячейкам памяти. Это, в свою очередь, приводит к критическим ошибкам в программе.

Использование ресурсов без ограничений

В ручном распределении памяти проблема имеет глобальный характер. Без проверок и ограничений происходит сбой распределения – одни данные занимают пространство, потенциально предназначенное для других. В результате они или игнорируются, или возникает ошибка, или вы получаете программу, которая будет «съедать» всю память машины во время исполнения.

К этому виду ошибок можно отнести и создание безразмерных массивов, потоков, использовании дескрипторов файлов или соединений в БД без проверки и закрытия.

Указатель на освобождённую память

В таких языках, как C и C ++, память должна быть освобождена, как только вы закончите с ней работать. Дальнейшее использование указателей на этот блок памяти приводит к ошибкам. Несмотря на очевидность описанного, в новостях вновь и вновь всплывают случаи «заморозки» крупных программных систем из-за этого сбоя.

Вывод нулевого указателя

До инициализации указатель имеет нулевое значение. Работа с ним приводит к ошибке. К примеру, в Java это NullPointerException. Ошибка хоть и детская, но очень распространена, поэтому избежать появления в этом рейтинге не могла.

Отсутствие инициализации

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

Рискованные алгоритмы

При работе с персональными данными необходимо надёжно их защищать. Не стоит полагаться на собственные силы, ведь в мире существует множество готового программного обеспечения и алгоритмов, которые работают куда лучше вашего неопытного мозга. Впрочем, даже к их использованию надо подходить с умом. Так алгоритм хэширования SHA-1 устарел и легко взламывается современными хакерами, поэтому стоит отдать предпочтение SHA-2 или SHA-3. В противном случае, вы рискуете не только репутацией своего ПО, но и материально.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


Важно:

Администрация форума не несет никакой ответственности за опубликованную информацию и действия пользователей.

Social Links

Facebook Group Click Here
Steam Group Click Here
Teamspeak Server Click Here
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.