3 полезных совета для обеспечения безопасности в Java-разработке

Источник: DZone Несмотря на то, что Java существует с 1990-х годов, это по-прежнему один из наиболее востребованных ЯП. Разработчики используют Java для эффективного решения многих проблем, в том числе связанных с другими языками. Кроме того, с ее помощью можно создавать решения любой сложности. Кофе-брейк #33. 3 полезных совета для обеспечения безопасности в Java-разработке. 4 способа анализа кода, о которых должен знать каждый разработчик - 1Еще одно преимущество Java состоит в том, что используя этот язык можно добиться высокого уровня безопасности. Конечно, не стоит принимать это как должное. Обеспечить безопасность при создании Java-приложения — один из главных приоритетов для разработчиков. Пренебрежение этим правилом приведет к тому, что ваша компания столкнется с недоверием со стороны потребителей. Чтобы вы могли избежать подобной ситуации, мы подготовили несколько практических советов, которые могли бы стать для вас полезными при разработке веб-приложений на Java.

Защита от внедрения SQL-кода

Внедрение SQL-кода — одна из наиболее серьезных уязвимостей. С ее помощью злоумышленники получают доступ к конфиденциальным данным. Проблема возникает, когда хакер перехватывает запросы приложения к базе данных и использует их для получения доступа к информации о пользователях, а затем — для любых других незаконных целей. Разумеется, от всего этого можно защититься. В ваших силах сделать так, чтобы злоумышленники не могли использовать атаки с внедрением SQL-кода в вашем приложении: например, параметризуя запросы. Для этого нужно использовать подготовленный запрос (prepared statement). В идеале разработчики должны применять только этот метод для создания запросов. Ниже приведен пример Java-кода, который поможет вам лучше понять, как это делается:
public void prepStatmentExample(String parameter) throws SQLException {
   Connection connection = DriverManager.getConnection(DB_URL, USER, PASS);
   String query = "SELECT * FROM USERS WHERE lastname = ?";
   PreparedStatement statement = connection.prepareStatement(query);
   statement.setString(1, parameter);
   System.out.println(statement);
   ResultSet result = statement.executeQuery();
   printResult(result);
}

Проверяйте сторонние библиотеки

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

Используйте данные с большой осторожностью

Каждое веб-приложение обычно содержит множество конфиденциальных данных, таких как банковские реквизиты клиентов и тому подобное. Следовательно, программистам важно быть очень осторожными при обработке такой информации. Лучше заранее рассчитать, когда и какие конфиденциальные данные будет запрашивать ваше приложение. И не забудьте очистить методы toString () в сущности предметной области. Разработка веб-приложений на Java, если она учитывает все требования к безопасности, способна помочь не только клиентам, но и компаниям. Можете не сомневаться: благодаря безопасности вам будет намного легче поднять свой бизнес на новый уровень.

4 способа анализа кода, о которых должен знать каждый разработчик

Источник: TechBeacon Вы наверняка слышали термин «статический анализ». Чаще всего под ним подразумевают какой-либо один известный инструмент или метод. Но на самом деле есть несколько разновидностей статического анализа, у каждой из которых есть определенное значение при использовании. Самый упоминаемый анализ кода называется SAST (Static Application Security Testing — статическое тестирование защищенности приложений). Считается, что это наилучший метод тестирования. Но кроме него вы можете использовать дополнительные методы, ведь каждый из них обнаруживает разные типы ошибок. Вот четыре типа анализа кода, которые я советую вам изучить. У каждого из них свои преимущества.

Производительность

Инструменты статического анализа помогают обнаружить шаблоны кодинга, снижающие производительность. Например, BoxedPrimitiveConstructor ищет шаблоны, такие как «new Boolean (true)». В ранних версиях Java он часто использовался, но теперь есть методы эффективнее. Используя инструменты статического анализа для обнаружения таких анти-шаблонов производительности, вы исключаете возможность того, что они попадут в вашу базу кода. Эти инструменты полезны и в плане образования: они сигнализируют опытным разработчикам о том, что изменились best practices кодинга и показывают новичкам лучший способ справиться с поставленной задачей.

Надежность

Такие проблемы, как NullPointerException в Java или утечка ресурсов в C обычно не влияют на безопасность. Но их нужно отслеживать и исправлять, так как эти проблемы могут привести к неожиданному поведению или потере времени из-за простоя. Согласитесь, никто не хочет в 3 утра получить сообщение или звонок о том, что ваш сервис «лежит». Инструменты статического анализа, ориентированные на надежность, могут помочь предотвратить такой вариант развития событий. Например, инструмент Infer от Facebook способен обнаруживать проблемы NullPointer, утечки памяти и проблемы безопасности / синхронизации потоков. Поскольку общеизвестно, что утечки памяти и проблемы с потоками трудно найти и отладить, инструменты статического анализа особенно полезны для такого типа ошибок: они экономят время разработчика и повышают производительность в долгосрочной перспективе.

Безопасность

Есть большой спектр проблем безопасности, которому соответствует ряд различных алгоритмов статического анализа, предназначенных для их выявления. Например, методы, нацеленные на поиск уязвимостей потока информации (№ 1, 3 и 7 из десятки критических угроз безопасности веб-приложений OWASP Top 10), не всегда хороши для обнаружения проблем безопасности памяти (SANS 25 Issue #1). Это означает, что рекомендуется использовать несколько инструментов, даже если вы в первую очередь заботитесь о безопасности. Упомянутый выше инструмент Infer помогает обнаружить уязвимости потока информации, такие как атаки с внедрением команд или неудачные попытки зашифровать неактивные данные. Настройка Infer для вывода на экран информации о вашем приложении и его инфраструктуре способна обнаружить больше ошибок и улучшить соотношение «сигнал / шум». Инструмент с открытым исходным кодом FindSecBugs обнаруживает проблемы с конфигурацией, использование плохо защищенной криптографии и проблемы с внедрением команд для конкретного фреймворка. Он работает “из коробки” — дополнительные настройки не понадобятся.

Стиль

Еще одна хорошая практика — поощрять разработчиков команды писать код в едином стиле. Не так важно выбрать конкретный стиль, как обеспечить условия, чтобы разработчики придерживались его. В качестве примера можно привести руководства по стилю от компании Airbnb. Есть две веские причины автоматизировать обнаружение нарушений стиля с помощью статического анализа. Во-первых, автоматизация помогает поддерживать целостность вашего кода. Во-вторых, если разработчик может ошибиться, то инструмент этого никогда не допустит — он всегда укажет на нарушения стиля. Никто не хочет быть рецензентом кода, который указывает другим на проблемы с пробелами или именами переменных. Лучше позволить инструментам взять на себя ответственность за такую дотошность, чтобы члены команды могли сосредоточиться на улучшении архитектуры и других высокоуровневых аспектах качества кода.

Взаимосвязанность

С таким количеством инструментов, необходимых для широкого охвата различных типов ошибок, интеграция этих инструментов в DevOps процессы очень важна. Самое главное здесь — поставить правильную цель для процесса разработки. Например, проверку кода, поскольку платформа используется несколькими разработчиками (в отличие от IDE, которые, как правило, менее связны) и часто управляется централизованно. Если вы хотите расширить использование статического анализа, начните с простых инструментов — FindSecBugs и PMD, которые заточены под поиск проблем с безопасностью и стилем кода. Infer и ErrorProne немного сложнее в работе, поскольку требуют интеграции в систему сборки, но они обеспечивают более глубокий анализ. Учитывая то, как они повышают производительность и уверенность, время, потраченное на внедрение таких инструментов в работу определенно стоит того.