Большинство людей воспринимает QR-код как безобидную короткую дорогу к сайту. Часто так и есть. Но QR — это просто контейнер для текста, а этот текст может быть куда чувствительнее ссылки. Прежде чем забросить картинку с кодом в первый попавшийся «онлайн-читатель QR», стоит знать, что вы, возможно, передаёте — и кому.

Что на самом деле может содержать QR-код

Считать QR-код с картинки — приватно, на своём устройстве — visual 1
Что на самом деле может содержать QR-код

Чёрно-белый узор кодирует обычный текст, и по договорённости этот текст может быть многим:

  • URL — частый случай, но иногда приватная или одноразовая ссылка (сброс пароля, приглашение, документ «не в списке», а не по-настоящему публичный).
  • Сеть Wi-Fi и пароль — коды «сканируй, чтобы подключиться» на роутерах и в отелях буквально кодируют имя сети и пароль открытым текстом.
  • Визитка (vCard) — имя, номер телефона, email и домашний или рабочий адрес.
  • Токен входа или платежа — некоторые приложения показывают QR, чтобы авторизовать сессию или перевод; строка внутри — по сути ключ.
  • Обычный текст или сообщение — что угодно, что кто-то решил закодировать.

Ничто из этого не опасно вам, когда вы декодируете это на своём устройстве. Проблемой оно становится, когда декодирование требует отправить картинку куда-то ещё.

Скрытый шаг: «онлайн-читатели» загружают вашу картинку

Считать QR-код с картинки — приватно, на своём устройстве — visual 2
Скрытый шаг: «онлайн-читатели» загружают вашу картинку

Вот часть, которую легко упустить. Типичный онлайн-читатель QR работает так: загружает файл вашей картинки на свой сервер, декодирует там и присылает результат обратно. Это значит, что картинка — и что бы код ни кодировал — покидает ваше устройство и приземляется на оборудование, которое вы не контролируете. Для ссылки на публичную статью — нормально. Для пароля Wi-Fi, токена входа или визитки с домашним адресом вы только что передали секрет на чужой сервер, где он может логироваться или кешироваться, и всё это ради чтения текста, который уже был на вашем экране.

Проверить, загружает ли инструмент, можно: следите за полосой прогресса, масштабирующейся с размером файла, или откройте вкладку Network браузера и посмотрите, несёт ли крупный запрос вашу картинку. По-настоящему локальные инструменты не делают ни того, ни другого.

Декодируйте локально вместо этого

Уважающий приватность подход — декодировать код в вашем собственном браузере, чтобы картинка никогда не путешествовала.

Читатель QR-кодов от IMG.DIY делает ровно это. Вы даёте ему картинку — перетащите, вставьте или выберите файл — и он рисует картинку на canvas и декодирует QR библиотекой jsQR прямо в вашем браузере. Ничего не загружается. Нет аккаунта и нет сервера, делающего работу, и как только страница загрузилась, оно продолжает работать с выключенной сетью. Можете доказать себе: загрузите инструмент, включите режим полёта и декодируйте код — он всё равно работает, потому что сервера в цепочке никогда не было.

Если код — URL, инструмент даёт вам кликабельную ссылку (помеченную rel=nofollow), чтобы вы увидели назначение, прежде чем на него пойти. Если это строка Wi-Fi или визитка, вы получаете сырой текст и кнопку копирования — прочтите, используйте, и он остаётся на вашей машине.

Разумная привычка для чувствительных кодов

Два маленьких правила держат вас в безопасности:

  1. Увидьте текст, прежде чем действовать. Декодирование кода показывает вам назначение или содержимое прежде, чем ваше устройство к чему-либо подключится. Это одно обезвреживает многие QR-мошенничества, где печатный код подменён на указывающий куда-то враждебно.
  2. Подбирайте инструмент под секрет. Для публичной ссылки почти неважно, где вы декодируете. Для пароля, токена или чьих-то личных данных декодируйте локально, чтобы секрет вообще не покидал ваше устройство.

Честные пределы стоит назвать: это читает код с картинки, которую вы даёте, по одной за раз, а не с живой веб-камеры — намеренный выбор, держащий всё локально. Для всего, что QR-код может прятать, чтение его на своём устройстве — просто правильный выбор по умолчанию.