Безопасность в Java стоит на первом месте. Благодаря этому свойству язык Java очень популярен при написании приложений разного рода, особенно когда дело касается высоконагруженных бизнес-приложений, которые будут взаимодействовать с большим количеством пользователей, а также осуществлять какие-то финансовые операции.
Общая безопасность приложения достигается различными инструментами и подходами, но некоторая часть этих «инструментов» уже встроена в структуру самого языка Java, например:
модификатор доступа,
загрузчик классов,
организация дополнительных услуг в приложении силами языка: шифрование данных, защищенная связь, аутентификация, авторизация и др.
Безопасность Java
Как мы уже отметили, сам по себе язык программирования Java имеет встроенные свойства, которые отвечают за безопасность вашего приложения. Благодаря им на Java можно писать безопасный код и пользоваться этими свойствами по умолчанию:
Статическая типизация данных. Java — это язык программирования со строгой статической типизацией. Это свойство дает возможность обнаруживать ошибки, связанные с типами данных, прямо во время выполнения программы.
Модификатор доступа. Внутри Java встроено множество различных модификаторов, которые позволяют очень гибко настраивать доступ к чему угодно: классам, методам или полям классов.
Автоматизированное управление памятью. Это свойство облегчает труд разработчиков за счет того, что не нужно управлять памятью «вручную», но самое главное — в Java есть встроенные «сборщики мусора», которые в автоматическом режиме высвобождают память от мусора.
Контроль байт-кода. Программы на Java всегда компилируются в байт-код, который постоянно проверяется перед запуском.
И др.
Но то, что безопасность в Java заложена в некоторых свойствах языках, еще не означает, что у вас получится безопасное приложение на этом языке, потому что писать безопасный код на Java нужно еще уметь. Для этого компания Oracle разработала подробную документацию со множеством рекомендаций. Чтение такой документации — это довольно скучное занятие, поэтому мы подготовили небольшую «выжимку» рекомендаций.
Безопасность Java: рекомендации от Oracle
Да, Java обладает определенными свойствами, чтобы сделать вашу разработку безопасной, однако в это же время Java обладает определенным набором уязвимостей, которые могут скомпрометировать вашу разработку. Поэтому ответственность за безопасность вашего приложения лежит не на языке Java, а на разработчике, который его программирует.
Чтобы свести к минимуму уязвимости Java-приложения, компания Oracle выпустила свод рекомендаций для разработчиков. Вот некоторые из них:
Изначально разрабатывайте API-интерфейсы с учетом безопасности.
Нужно избегать дублирования кода, потому что иногда нужно будет в такой код вносить изменения, а данные изменения не нужны будут во всех местах, где применяется дублированный код.
Используйте ограничение привилегий к классам и методам.
Устанавливайте границы доверия. Например, браузер не находится в одной системе с сервером приложения, так же как и сервер не находится в одной системе с браузером. А это значит, что работа должна быть организована таким образом, чтобы ни браузер, ни сервер не зависели от поведения друг друга.
Используйте безопасный сторонний код. Это касается библиотек, фреймворков и другого программного обеспечения «со стороны», которое вы планируете использовать в своей разработке. Важно отслеживать, поддерживаются ли эти инструменты разработчиком, вовремя ли они обновляются, имеют ли большее количество уязвимостей и т. д. Если вы используете незащищенный инструмент, то это в первую очередь подрывает безопасность вашей разработки.
Не допускайте действий, которые будут использовать большие ресурсы «железа». Например: графику большого размера, «ZIP-“бомбы“», большое количество регулярных выражений, бесконечные циклы, обработку JAR из ненадежных источников.
Освобождать ресурсы. Хотя в Java присутствует автоматическое высвобождение ресурсов памяти, все равно часть объектов может быть под «ручным» управлением в виде исключений. Не нужно забывать про такие объекты, так как они могут потреблять большое количество ресурсов.
Нужно всегда удалять конфиденциальную информацию из исключений.
Нужно избегать применения динамического SQL.
Нужно осторожней и после тщательной обработки включать различные данные в HTML и XML, чтобы исключить межсайтовый скриптинг (XSS).
Создавайте песочницы для запуска кода, полученного из ненадежных источников.
Нужно избегать сериализации классов, которые чувствительны к безопасности.
И др.
Заключение
Чтобы поддерживать должную безопасность вашего Java-приложения, нужно приложить немало собственных усилий, а не надеяться только на внутренние свойства самого Java. Все, что заложено для безопасности внутри самого языка, — это всего лишь инструменты. А воспользуется ли ими разработчик — это целиком и полностью лежит под ответственностью самого разработчика.

Другое