Автор оригинала: Eddie Segal.
Изображение Дарвина Лаганзона из Pixabay
Нет программного обеспечения на 100% безопасно, независимо от того, сколько вы можете понравиться. Даже лучшие разработчики не могут объяснить все уязвимости безопасности, и после того, как приложение будет развернуто факторами окружающей среды и использовать дополнительные осложнения безопасности. Однако это не значит, что вы должны отказаться от попыток разработать безопасное программное обеспечение и не означает, что вы ничего не можете сделать, чтобы улучшить безопасность вашего приложения.
Как уязвимости попадают в программное обеспечение?
Уязвимости находят свой путь в программное обеспечение тремя основными способами:
1. Небезопасные практики кодирования Традиционно разработка программного обеспечения не включает в себя проблемы безопасности или тестирование до самого конца цикла, что означает, что код часто производится для функционала, но не обязательно безопасным. Зачастую количество времени, необходимое для обратного замедленного выполнения кода безопасным, в сочетании с узкими сроками, означает, что уязвимости безопасности, скорее всего, будут игнорироваться или недостаточно исправлены. По мере того, как команды разработчиков принимают гибкую методологию, а скорость развития и развертывания увеличивается, эта проблема может быть усугублена.
2. Включение недостаточных компонентов Большинство приложений используют код открытого исходного кода или библиотек, многие из которых имеют уязвимости. Хотя ряд этих уязвимостей известны, и ресурсы существуют, объясняющие, как их исправить, разработчики не всегда в курсе этой информации или версий могут быть использованы непоследовательно.
Если используются только фрагменты кода или библиотеки, используются в моде «черный ящик», трудно знать, уязвим ли они, не анализируя их напрямую. Сторонние интеграции и среды развертывания могут также представить непредвиденные риски или создавать конфликты, которые могут быть использованы.
3. Уязвимости, специфичные языки Каждый язык имеет уникальные уязвимости, которые разработчик менее опытный на языке, может не знать. Например, низкоуровневые языки, такие как сборку, C, или C ++, уязвимы для переполнения буфера, хакеры могут использовать для записи вредоносного кода к соседней памяти после заполненной емкости буфера. Еще одна общая уязвимость, найденная на языках, таких как SQL, JavaScript и PHP, является инъекция кода, где хакеры используют недостатки в обработке данных, которые вызывают интерпретацию пользовательского ввода в качестве системных команд или включают вредоносную скрипт в загруженных файлах.
Даже если проблема отсутствует при развертывании кода, Кибер преступники постоянно инновации ?| Новые способы Infiltrate Systems и Software и могут обнаружить уязвимости, которые ранее были неизвестны или невозможны эксплуатации.
Что такое безопасное кодирование?
Безопасное кодирование Является ли практика разработки программного обеспечения, которая по своей природе защищает от уязвимостей, а не только защищенным внешне. Он зависит от разработчика, зная уязвимостей, которые поставляются с языками, рамками, и библиотеками, которые они выбирают использовать и действовать соответственно.
Безопасное кодирование требует, чтобы разработчик рассмотреть полную среду, в которой приложение будет запущено и заботится о том, чтобы убедиться, что уязвимости, обнаруженные в будущем, можно исправить как можно быстрее.
Безопасное кодирование: Лучшие практики
Невозможно устранить все уязвимости программного обеспечения, но эти лучшие практики могут помочь вам убедиться, что ваши приложения будут более безопасными с начала.
Смещенная левая безопасность Одна из первых и самых полезных практик, которые необходимо предпринять, является переключение левой безопасности, обычно делается через Devsec или Devsecops Методологии. Подчеркивая безопасность в начале в SDLC означает, что недостатки с меньшей вероятностью будут игнорироваться из-за неумолимых графиков времени, и что они обнаружены ранее, требуя меньшего количества работы, чтобы исправить.
Когда безопасность является частью процесса разработки, команды DEVSEC могут оценить риски библиотечных зависимостей и код открытого исходного кода, прежде чем они будут включены, и легче обеспечить, чтобы версию была согласована.
Использование информационных инструментов, таких как список Top 10 Top 10, может предоставить образование и руководство по управлению уязвимостями. В сочетании с Инструменты автоматизации Как и тестирование безопасности статических приложений (SAST) или динамическое тестирование безопасности приложений (DAST), разработчики могут лучше определить недостатки и учиться в режиме реального времени, как их исправить.
Валидация входов и кодирования выходов Вы должны проверить весь пользовательский ввод на основе синтаксиса и семантических критериев, а запросы должны быть параметризованы или иным образом четко идентифицированы как пользовательский ввод. Whitelisting — это рекомендуемый метод проверки и может быть достигнут путем сравнения с регулярными выражениями.
Вы должны кодировать выходы через такие объекты, как JavaScript Hex или HTML, чтобы устранить потенциально вредные символы и команды сценариев Nullify.
Используйте проверку Server Side и кодировку, чтобы обеспечить покрытие всех компонентов, включая пользовательские устройства и задневские веб-сервисы. При использовании в комбинации эти практики могут защищать от Скрипты по перекрестному сайту (XSS) и кодовые инъекции атаки.
Аутентификация и управление сессией Вам необходимо включить управление сеансами и управление управлением личности на стороне сервера, чтобы минимизировать риск того, что пользовательская сессия угнана, или эти учетные данные незаконно используются. Мультифакторная аутентификация обеспечивает большую безопасность, особенно в сочетании с безопасными механизмами хранения и восстановления паролей.
Реализация консервативных периодов времени ожидания и бездействия может помочь вам снизить риск того, что пользовательские сеансы эксплуатируются и гарантируют, что пользовательские данные сохраняются с минимальным воздействием на опыт клиента. Ограничение количества одновременных сессий поможет обеспечить, чтобы только законные пользователи могли получить доступ к приложению или сайту.
Правильные методы шифрования Использование инструментов шифрования, разработанные экспертами Cryptography, такие как рецензированные рецензируемые Google KeyCzar или Bouncy Castle, является более безопасным и быстрее, чем пытаться разработать свои собственные решения. Независимо от того, какие протоколы шифрования вы используете, важно не пренебрегать использованием архитектурных методов проектирования, таких как мернация или строгое доверительная политика.
Неуместное руководство ключей может отрицать даже самую сильную криптографию, поэтому вы должны обеспечить использование клавиш отдельно от зашифрованных данных и рассмотреть возможность использования A Модуль безопасности оборудования (HSM) Отказ
Случайное шифрование переданных данных обеспечит наибольшую безопасность. Если это невозможно, обязательно зашифруйте данные как в покое, так и в транзите, чтобы минимизировать риск потери данных или модификации.
Заворачивать
Клиенты все чаще требуют безопасных продуктов, и разработчики делают все возможное, чтобы их предоставить. Это тенденция, которая вряд ли изменится в ближайшее время, и так же продолжит определять, какие заявки и их связанные с ними компании выживают.
Реализация этих лучших практик и адаптация к постоянно меняющейся среде безопасности, вы можете гарантировать, что ваши продукты были максимально безопасными, и при этом уменьшите объем работы, необходимые для выполнения пост-развертывания для поддержания безопасного продукта. Продукты, которые клиенты могут доверять с самого начала, помогут повысить репутацию бренда в качестве надежного источника программного обеспечения и помочь создать свой конкурентный край.
Оригинал: «https://www.codementor.io/@eddiesegal5/secure-coding-how-to-prevent-vulnerabilities-from-creeping-into-your-software-xn487opv8»