Правительственное агентство США постановило, что программисты должны отдавать предпочтение языкам с безопасной памятью, таким как Rust и Java. Но почему они лучше и имеет ли это значение?
Что говорит Белый дом?
В заявлении от 26 февраля Офис национального кибердиректора Белого дома (ONCD) призвал разработчиков программного обеспечения переходить на языки программирования с сохранением памяти, такие как Rust.
В заявлении ONCD говорится:
Почему это важно?
ONCD, созданный в 2021 году, подчиняется непосредственно президенту и консультирует его по вопросам кибербезопасности и смежным проблемам. Политика США, вероятно, окажет влияние на весь мир технологий.
Многие из самых серьезных уязвимостей в системе безопасности были связаны с проблемами безопасности памяти. Старые языки низкого уровня предоставляют программистам большие возможности, но это увеличивает риск того, что ошибочный код приведет к серьезным последствиям.
Тем не менее, использование безопасных для памяти языков, таких как Rust, Python и JavaScript, уже давно растет. Вероятно, ONCD делает это заявление потому, что менее безопасные языки, такие как C, существуют так давно, что их устаревший код уже укоренился в инфраструктуре и большинстве программ, которые мы используем ежедневно.
Как выглядит небезопасный язык?
Небезопасный код не всегда выглядит страшным или даже сложным. Возьмем пример простой программы на языке C:
Это классический пример ошибки, которая может привести к атаке на переполнение буфера. Программист забыл, что массивы в C (и большинстве других языков) имеют нулевую индексацию, то есть первый элемент находится по адресу arr[0] , и т. д. Поэтому попытка получить доступ к arr[3] - это ошибка, но такая, которую C допустит:
Значение по адресу arr[3] - это правильный адрес памяти, как и любой другой, просто он не принадлежит массиву. Там может храниться любое значение, и последствия обращения к нему или записи в него могут быть самыми разными - от сбоя программы до катастрофического инцидента с безопасностью. Многие хакеры на протяжении всей истории пользовались такими ошибками.
Как выглядит код, безопасный для памяти?
В таких языках с безопасной памятью, как Rust, подобной проблемы просто не существует. Вот та же программа на языке Rust:
Хотя этот код синтаксически корректен, Rust не сможет его скомпилировать:
Компилятор объясняет проблему и отказывается создавать исполняемый файл. Rust просто не позволит вам запустить этот код.
Кроме этого, в Rust есть много других возможностей, которые помогут вам защититься. Он включает в себя такие функции, как умные указателидля автоматического управления памятью и предотвращения разыменования нулевого указателя.
Стоит ли мне переходить на другой язык?
Каждый язык программирования имеет свое предназначение, поэтому следует с опаской относиться к советам избегать любого из них, даже если они исходят от президента. Хотя вы можете выбрать специализацию на каком-то конкретном языке, всегда полезно изучать разные языки, чтобы расширить свои возможности.
Безопасность памяти - это особенность стольких современных языков, что вы вполне можете быть знакомы хотя бы с одним из них. У C есть свои преимущества, но есть и более безопасные варианты, которые приведут к меньшему количеству казусов. В частности, если вы ищете эффективный язык с хорошими системами безопасности, то Rust просто необходим.
Если вам понравилась эта статья, подпишитесь на меня, чтобы не пропустить еще много полезных статей!
Вы также можете прочитать меня здесь:
- Telegram: https://t.me/gergenshin
- яндекс Дзен: https://dzen.ru/gergen
- официальный сайт: https://www-genshin.ru