The Rustonomicon
Итак, каковы отношения между Безопасным и Небезопасным Rust? Как они взаимодействуют между собой?
Rust разделяет Безопасный и Небезопасный Rust с помощью ключевого слова unsafe , которое можно трактовать как интерфейс внешних функций (foreign function interface) (FFI) для взаимодействия Безопасного и Небезопасного Rust. Это магия, благодаря которой можно сказать, что Безопасный Rust — действительно безопасен: вся работа со страшными небезопасными частями языка, как и в других безопасных языках, отводится исключительно FFI.
Но из-за того, что один язык, получается, входит в другой, их можно спокойно смешивать, обозначая границы между ними ключевым словом unsafe . Не надо писать заголовочные файлы, инициализировать среду исполнения или делать какие-либо другие рутинные операции по обработке FFI.
На данный момент unsafe может появиться в Rust только в определенных местах, которые грубо можно разделить на две категории:
- Перед объявлением непроверенных контрактов. Я, как автор контракта, требую писать unsafe , чтобы убедиться, что вы, как пользователь, поняли следующее:
- Перед функциями unsafe показывает, что ее вызывать небезопасно. Вы должны посмотреть документацию, чтобы определить, в чем конкретно это выражается, и написать unsafe , чтобы подтвердить, что вы поняли опасность вызова такой функции.
- Перед объявлением типажей unsafe показывает, что реализация типажа является небезопасной операцией, потому что у типажа есть контракты, которым другой небезопасный код имеет право слепо доверять. (Больше об этом ниже.)
- В реализации типажей unsafe показывает, что соблюдается unsafe контракт типажа.
- В блоке unsafe показывает, что любая работа с небезопасными операциями должна обрабатываться внутри, и, следовательно, родительская функция безопасна.
В языке есть особый случай, флаг #[unsafe_no_drop_flag] , присутствующий по историческим причинам и находящийся на пути к выпиливанию. Смотрите для уточнения раздел флаги удаления.
Примеры небезопасных функций:
- slice::get_unchecked выполняет непроверенное индексирование, позволяющее свободно нарушить безопасность памяти.
- любой сырой указатель на тип фиксированного размера обладает внутренним методом offset , который вызывает Неопределенное Поведение, если находится «вне границ», определенных LLVM.
- mem::transmute интерпретирует значение полученного типа как другого типа, самовольно обходя безопасность типов. (смотрите для уточнения преобразования типов)
- Все функции FFI являются unsafe , потому что могут выполнять произвольные сценарии. Часто очевидным виновником этого является Си, но вообще-то любой язык может сделать что-то, от чего Rust не будет в восторге.
В Rust 1.0 есть ровно два небезопасных типажа:
- Send — это маркерный типаж (у него нет своего API), который обещает, что типы, реализующие его, можно можно безопасно посылать (перемещать) в другой поток.
- Sync — это маркерный типаж, который обещает, что потоки могут безопасно делить между собой типы, реализующие его, используя общую ссылку на них.
Необходимость в небезопасных типажах кроется в основных свойствах безопасного кода:
Каким бы убогим ни был Безопасный код, он не сможет вызвать неопределенное поведение.
Это означает, что Небезопасный Rust, как передовой отряд неопределенного поведения, должен очень подозрительно относиться к обобщенному безопасному коду. Для ясности, Небезопасный Rust доверяет конкретному безопасному коду абсолютно. Другое поведение выродилось бы для него в бесконечные спирали параноидального отчаяния. В частности, доверять корректности стандартной библиотеки абсолютно нормально. std — это, по сути, расширение языка, и вам, действительно, следует доверять ему. Если std нарушает свои гарантии, тогда это точно ошибка в языке.
Тем не менее, лучше минимизировать напрасные надежды на железобетонность безопасного кода. Ошибки случаются! Я ещё раз подчеркну: беспокоиться надо только за Небезопасный код. Безопасный код может слепо верить всему, что не нарушает безопасность памяти.
С другой стороны безопасные типажи могут объявлять произвольные контракты, но, небезопасный код не может считать, что они будут на самом деле соблюдаться из-за того, что их реализация считается безопасной,. Кто угодно может реализовать интерфейс так, как он хочет. В этом и состоит фундаментальная разница — доверять ли правильности конкретного участка кода или доверять правильности любого кода, который будет когда либо написан.
Например, в Rust есть типажи PartialOrd и Ord , нужные для того, чтобы можно было отличить типы, которые можно «только» сравнивать, от тех, значения которых находятся в отношении строгого порядка. В большинстве своем, каждое API, которое хочет работать с упорядоченными данными, хочет иметь Ord . Например, упорядоченный словарь BTreeMap не имеет никакого смысла создавать для частично упорядоченных данных. Если вы объявите, что тип реализует Ord , но не предоставите значения, которые действительно упорядочены, BTreeMap попадет в просак, ему станет очень плохо. Вставленные данные будет уже невозможно найти!
Но это еще нормально. BTreeMap безопасен, поэтому он гарантирует, что даже если вы дадите ему абсолютно бредовую реализацию Ord , он будет все равно делать что-то безопасное. Он не начнет читать неинициализированную или невыделенную память. На самом деле BTreeMap даже не потеряет ваши данные. После его удаления, все деструкторы будут вызваны успешно! Ура!
Только надо помнить, что BTreeMap реализован с использованием маленькой щепотки Небезопасного Rust (как и большинство коллекций). Поэтому не всегда можно утверждать, что плохая реализация Ord не приведёт к небезопасному поведению BTreeMap. BTreeMap не должен полагаться на Ord , ставя под угрозу безопасность. Ord предоставляется безопасным кодом, а безопасный код считает всё безопасным.
Но правда было бы здорово, если бы небезопасный код мог бы в каких-нибудь местах доверять контрактам какого-либо типажа? Эта проблема, которой занимаются небезопасные типажи: помечая небезопасность реализации самого типажа, другой небезопасный код может доверять реализациям контракта такого типажа. Хотя она может быть неправильна во всех произвольных случаях.
Например, имея гипотетический типаж UnsafeOrd, технически такая реализация будет правильна:
#![allow(unused)] fn main() use std::cmp::Ordering; struct MyType; unsafe trait UnsafeOrd < fn cmp(&self, other: &Self) ->Ordering; > unsafe impl UnsafeOrd for MyType < fn cmp(&self, other: &Self) ->Ordering < Ordering::Equal >> >Но, наверное, это совсем не та реализация, которую вам бы хотелось иметь.
Rust традиционно не делает типажи небезопасными по умолчанию, потому что это сделало бы небезопасность повсеместной, что абсолютно нежелательно. Send и Sync небезопасны, потому что потокобезопасность - это фундаментальное свойство, от которого небезопасный код даже не может попытаться защититься таким же образом, как он защитился бы от плохой реализации Ord. Единственный способ защититься от потоконебезопасности - не использовать потоки вообще. Сделать каждую загрузку и сохранение атомарными недостаточно, потому что могут существовать сложные варианты, задействующие отдельные области памяти. Например, указатель и размер у Vec должны быть синхронизированы.
Даже такая парадигма параллельности как обмен сообщениями, которая традиционно считается Абсолютно Безопасной, неявно опирается на потокобезопасность - действительно ли вы используете обмен сообщениями, если передаете указатель? Для Send и Sync, таким образом, требуется базовый уровень доверия, который Безопасный код не может предоставить, поэтому их реализацию необходимо сделать небезопасной. Чтобы избежать небезопасности, проникающей везде, возникнувшей вследствие этого, Send и Sync автоматически выводятся для всех типов, состоящих из значений типов, реализующих Send и Sync. 99% типов реализуют Send и Sync, и 99% из них никогда не сообщают об этом (оставшийся 1% - это по большей части примитивы синхронизации).
Safe code: перевод, синонимы, произношение, примеры предложений, антонимы, транскрипция

- Теория
- Грамматика
- Лексика
- Аудио уроки
- Диалоги
- Разговорники
- Статьи
- Онлайн
- Тесты
- Переводчик
- Орфография
- Радио
- Игры
- Специалистам
- Английский для медиков
- Английский для моряков
- Английский для математиков
- Английский для официантов
- Английский для полиции
- Английский для IT-специалистов
- О проекте
- Реклама на сайте
- Обратная связь
- - Partners
- OpenTran
- Словари
- Испанский
- Голландский
- Итальянский
- Португальский
- Немецкий
- Французский
- Хинди
- Содержание
- Перевод
- Синонимы
- Антонимы
- Произношение
- Определение
- Примеры
- Транскрипция
Copyright © 2009-2024. All Rights Reserved.
Все права на сервисы и материалы, находящиеся на сайте EnglishLib.org, защищены. Использование материалов возможно только с письменного разрешения владельца и при указании прямой активной ссылки на EnglishLib.org.
Safe code что это
Опубликовано 24.07.2020 в 11:03
Россияне жалуются на кражи денег с карт Сбербанка через онлайн-сервис. Клиенты не получают push-уведомлений о переводах средств или SMS с кодами для подтверждения оплаты покупок. А просто внезапно узнают, что счет опустошен мошенниками.

Закупиться за чужой счет
Москвичка Марина Зайцева стала жертвой мошенников, о чем рассказала в Facebook. Обнаружив, что злоумышленники взломали ее «Сбербанк Онлайн», женщина позвонила в кол-центр и попросила заблокировать счета. Оператор сказал, что сделал это. Но всего через несколько минут Зайцева получила SMS об оплате ее карточкой покупок на 51 990 рублей на сайте «Беру.ру». Хотя 3dsecure-код для подтверждение оплаты ей не приходил.
Повторный звонок в кол-центр принес неутешительные новости. Карта оказалась не заблокирована, деньги списали. На все претензии сотрудница посоветовала Наталье обратиться в полицию. В партнере Сбербанка маркетплейсе «Беру.ру» тоже не смогли помочь Марине. Сотрудница нашла заказы и начала их было отменять.
«Потом просит вдруг неожиданно меня подождать и через пять минут сообщает, что она ошиблась! И она не видит эти заказы, которые она видела только пять минут назад и, более того, начала их отменять! И она советует мне обратиться в полицию», — добавила Наталья.
Запретить уведомления
У 69-летнего пенсионера, бывшего программиста Сергея Сидорова (фамилия изменена) мошенники украли 30 тысяч с кредитной карты. Злоумышленники вошли в его «Сбербанк Онлайн» с нового номера телефона. На пенсионной карте «Мир» денег почти не было. Поэтому мошенники добавили свой номер в список для отправки уведомлений об операциях по кредитке и отключили сообщения на номер Сергея Викторовича. Это может сделать любой клиент банка или мошенник.

«Как можно оставлять возможность отключать основной телефон? Объяснение от Сбербанка: „А вдруг вы потеряли телефон“? Да если кто-то потерял, пусть побегает кругами, пока все не переоформит! Но разрешать всем такое делать нельзя!» — возмущается Сергей Викторович.
В даркнете свободно продаются номера карт. А подобрать срок действия и CVV-код для современных хакеров не представляет труда. Собеседник «360» не называл никому свои банковские данные, а карточкой пользовался только для оплаты парковки. Поэтому полагает, что именно через номер карты злоумышленники попали в его «Сбербанк Онлайн».
После этого мошенники похитили 30 тысяч рублей с карты. Затем попробовали вывести еще 58 тысяч, но помешал ежедневный лимит. Попытки продолжались несколько дней. К сожалению, как и многие его ровесники, Сергей Викторович редко читает SMS. И заметил неладное, когда деньги были украдены. Сейчас пенсионер написал заявление в службу безопасности банка и собирается обратиться в полицию.
«Перевод был из Сбербанка на счет в Сбербанке. И мне служба поддержки сказала, что они не могут отменить этот платеж. Сейчас счета заблокированы, я ничего не могу сделать. А там же большие проценты капают за пользование кредитными деньгами. А проценты, как я понимаю, они сейчас с удовольствием в свой карман считают», — заключил Сергей Викторович.
«360» направил информацию об обоих случаях в пресс-службу Сбербанка, но комментария так и не получил.
Возможность для мошенников
Если банк дает возможность перевести отправку уведомлений и 3dsecure-кодов на другие номера, то мошенники вполне могут этим пользоваться, согласился руководитель Агентства кибербезопасности, член экспертного совета комитета Госдумы по информационной политике Евгений Лившиц.
«Что касается подбора срока действия и покупки номеров карт в даркнете, то там продаются данные карт уже со сроком действия. Никаких проблем с этим нет. К сожалению, этих утечек много. Зачастую они связаны с сотрудниками банков. Они принимают в этом непосредственное участие», — утверждает эксперт.
В ситуации с Мариной Зайцевой Лившиц предположил, что хищение произошло из-за нерасторопности сотрудницы Сбербанка. Если клиент обратился с просьбой заблокировать карту из-за угрозы кражи средств, это нужно делать молниеносно. Хотя многие кредитные организации самостоятельно блокируют счета при попытках подозрительных транзакций.
«Такие случаи происходят ежедневно. Объективной статистики нет, а та, что есть, точно кратно хуже. Сами банки эту информацию не сообщают, для них это большие репутационные потери, для стоимости акций тоже. В правоохранительные органы обращается маленький процент людей, потому что понимают, что вероятность успеха близка к нулю», — заключил собеседник.
Опубликовано 24 июля 2020 года на сайте 360tv.ru
Предыдущая
Система хитрых платежей. Мошенники нашли способ выводить деньги через СБП
Мошенники заработали на сим-картах. Задержаны аферисты, списывавшие деньги со счетов граждан
Деятельность осуществляется при грантовой поддержке Фонда "Сколково"
Copyright © 2024, SafeTech.
Safe code что это
НАСТОЯЩИЙ МАТЕРИАЛ (ИНФОРМАЦИЯ) ПРОИЗВЕДЕН И (ИЛИ) РАСПРОСТРАНЕН ИНОСТРАННЫМ АГЕНТОМ «РОСКОМСВОБОДА» ЛИБО КАСАЕТСЯ ДЕЯТЕЛЬНОСТИ ИНОСТРАННОГО АГЕНТА «РОСКОМСВОБОДА». 18+
Поддержать проект Роскомсвободы Инструменты
Двухфакторная аутентификацияЗнакомимся с двухфакторной аутентификацией на примере аккаунта Google
- Последнее обновление: сентябрь 2021 г.
Двухфакторная аутентификация – способ усилить защиту доступа к данным. В дополнение к привычному паролю вам нужно сделать что-то ещё. Это затруднит жизнь злоумышленнику, который пытается «взломать» чужой аккаунт.
Представьте сейф. С помощью специального диска с цифрами вы выбираете правильный код доступа. Но ещё нужно использовать ключ. Код доступа («что я знаю») и ключ («что я имею») – два разных фактора.
Если второй фактор – это еще один пароль, то говорят «двухэтапная аутентификация».
Самые распространенные виды второго фактора:
- SMS-код. Система просит ввести одноразовый код, который отправляет на ваш номер мобильного телефона. Возможно, самый распространенный вариант двуфакторной аутентификации.
- Коды из мобильного приложения. Такое приложение периодически генерирует одноразовые коды. Подключение к интернету или SIM-карта не нужны. Важно, чтобы и на компьютере, и на смартфоне было одно и то же (правильное) время. Этот способ мы обычно советуем по умолчанию.
- Резервные коды. Вы заранее генерируете одноразовые коды и храните их в надёжном месте. Очень выручает, если двухфакторная аутентификация включена одним из двух способов выше, но вы не можете воспользоваться смартфоном (потеряли, разбили и т.д.).
- Файл-ключ. При включении двухфакторной аутентификации вы указываете какой-нибудь файл на диске (любой). Вам понадобится «предъявлять» этот файл для доступа к своему ресурсу вместе с паролем. Если потеряете файл (или измените его) – потеряете доступ. Такая защита используется, в частности, менеджером паролей KeePassXC и программой для шифрования файлов и дисков VeraCrypt.
- Аппаратный токен. Устройство типа флешки. По смыслу это ближе всего к ключу, которым вы отпираете дверь своей квартиры.
Подумайте о том, чтобы включить двухфакторную аутентификацию хотя бы для самых важных своих аккаунтов, если вы ещё не сделали это.
По возможности лучше избегать SMS. Во-первых, сама технология разрабатывалась в те давние годы, когда про безопасность особенно не думали. При определённых условиях SMS-сообщения можно перехватить. Во-вторых, известны случаи, когда операторы мобильной связи «с подачи» злоумышленников перевыпускали SIM-карты, не извещая текущих владельцев.
Давайте посмотрим, как включить двухфакторную аутентификацию в аккаунте Google. Наша задача – использовать в качестве основного способа двухфакторной аутентификации коды из мобильного приложения, а для подстраховки – резервные коды.
Включение двухфакторной аутентификации в аккаунте Google
1. Откройте на компьютере браузер и войдите в свой аккаунт Google (если ещё не вошли).
2. Нажмите круглую цветную кнопку с первой буквой своего имени или аватаркой (если загружали аватарку) в правом верхнем углу экрана. Появится небольшое меню. Нажмите кнопку «Управление аккаунтом Google».

3. Вы на странице настроек аккаунта Google. В левом столбце выберите пункт «Безопасность».

4. Прокрутите чуть вниз до раздела «Вход в аккаунт Google».

5. Нажмите «Двухэтапная аутентификация». Откроется приветственное окно с базовой информацией о том, что нам предстоит сделать.

6. Нажмите синюю кнопку «Начать». Придётся еще раз ввести свой пароль к аккаунту Google. Это нормально. Когда дело касается настроек, Google время от времени просит ввести пароль. Введите пароль и войдите в аккаунт.
Сначала Google предлагает три способа подключить двухфакторную аутентификацию (нажмите ссылку «Другие варианты»):
- через SMS (мы говорили, что это не самый надёжный способ);
- через «Уведомление от Google» (специфический метод Google; на смартфоне тоже должен быть выполнен вход в аккаунт Google);
- с помощью физического токена.
Увы, мобильное приложение по умолчанию Google почему-то не предлагает. Что ж, включим двухфакторную аутентификацию с помощью уведомления от Google.

7. Убедитесь, что ваше устройство в списке (то есть, на нём действительно выполнен вход в аккаунт Google).

Нажмите синюю кнопку «Продолжить».
8. «Почти готово!» – радостно сообщает Google и предлагает указать резервный способ. Причём подсовывает нам SMS. Но вы нажмите на ссылку «ИСПОЛЬЗОВАТЬ ДРУГОЙ СПОСОБ».
9. Google сразу создаст для вас десять резервных кодов. Запишите их куда-нибудь и храните в надёжном месте.

Нажмите синюю кнопку «Далее». Выплывет ещё одно маленькое предупреждающее окошко. Выберите «Я получил коды».
10. Google всё ещё сомневается, нужно ли включать двухфакторную аутентификацию. Нажмите синюю кнопку «Включить».
Теперь в настройках аккаунта Google вы можете видеть, что двухфакторная аутентификация (которую строгий Google упорно называет двухэтапной) включена.

Теперь при попытке входа в аккаунт Google на компьютере у вас сначала спросят пароль, а потом попросят подтвердить вход на мобильном устройстве.


На телефоне появится запрос:
Нажмите «Да», и Google откроет доступ к вашему аккаунту на компьютере.
Установка приложения для генерирования кодов
Всё уже включено, зачем приложение?
Строго говоря, если двухфакторная аутентификация нужна вам только для аккаунта Google, то да, всё включено и можно больше ничего не делать. Но приложение – более универсальный вариант, и мы хотим его показать вам в этом материале. Ведь у нас много аккаунтов, где стоило бы включить двухфакторную аутентификацию. «Уведомления от Google» для них работать не будут. А коды из приложения – будут.
Возможно, самое известное приложение для генерации годов – Google Authenticator. Но вообще таких приложений много и для Android, и для iOS. Вот некоторые примеры приложений с открытым кодом:
- для Android: andOTP, Aegis Authenticator;
- для iOS: Authenticator, Tofu Authenticator.
Для иллюстраций в этом материале мы будем использовать andOTP для Android. (Если вы выбрали другое приложение, действуйте по аналогии).
Скачайте и установите приложение andOTP на ваш Android-смартфон.
Добавление приложения для генерирования кодов
Пусть вас не смущает, что Goolge ведёт себя так, будто никакого иного приложения для генерирования кодов, кроме Google Authenticator, не существует. Все прекрасно работает и с аналогом.
1. Зайдите в настройки аккаунта Google, пункт «Безопасность», прокрутите немного ниже и найдите поле «Приложение Authenticator».

2. Выбор операционной системы.

Выберите «Android» и нажмите «Далее».
3. Вы увидите окно с QR-кодом. Сканируя такой код с помощью мобильного устройства, можно получить необходимые данные сразу, не вводя их вручную.

4. Запустите на смартфоне приложение andOTP. Если это первый запуск andOTP, программа может сама предложить сканировать код. Если это не произошло, нажмите кнопку (+) в правом нижнем углу.

В выпадающем меню выберите первый пункт «Сканировать QR-код».

5. Откроется утилита сканирования. Наведите камеру смартфона на QR-код на экране вашего компьютера. QR-код будет автоматически отсканирован, а запись о вашем аккаунте Google появится в andOTP. Код (шесть цифр) будет сгенерирован немедленно. Обратите внимание: сгенерированный код действует очень небольшое время. О ходе времени можно судить по рыжей полоске под названием программы andOTP.

Когда время истекает, цифры кода (обычно серые) становятся красными. Значит, лучше чуть-чуть подождать, чтобы andOTP сгенерировал новый код.

6. Ура, QR-код успешно сканирован, andOTP исправно выдаёт коды на смартфоне. Возвращаемся на компьютер, нажимаем «Далее». Google предложит ввести код из andOTP, сделайте это.

Нажмите «Подтвердить». Если всё в порядке, Google покажет окошко с бодрой надписью «Готово!». Нажмите «Готово».
К списку вторых факторов добавится «Приложение Authenticator».

Настройка двухфакторной аутентификации завершена. Теперь вы сможете входить в аккаунт Google с помощью одного из трёх способов: подтверждения Google, одноразового кода из приложения andOTP или резервного кода. По умолчанию это простое подтверждение на смартфоне. Переключиться на другой способ можно, если в ответ на запрос второго фактора нажать ссылку «Другой способ». Галочку в поле «Запомнить на этом компьютере» есть смысл ставить только на устройстве, которому вы доверяете, где исключён несанкционированный доступ. Двухфакторная аутентификация на этом компьютере будет отключена на 30 дней.
Если же вам нужно включить двухфакторную аутентификацию для другого сервиса, например, для Facebook, повторите шаги этого раздела для настроек Facebook и andOTP. Когда вы сделаете это, вы увидите, что andOTP генерирует коды и для Google, и для Facebook.
Напоследок – о проблеме, которая иногда возникает у пользователей в связи с двухфакторной (двухэтапной) аутентификацией. Вы вводите на компьютере код из andOTP (или аналогичного приложения), а сервис на компьютере сообщает об ошибке. Если вы ввели код верно, проблема, скорее всего, в разных настройках времени на компьютере и на смартфоне. Это бывает, особенно при смене часовых поясов и ручном изменении системного времени. Просто установите одинаковое время на обоих устройствах.