Secure Link
Назад к блогу
15 января 2024 г.
10 мин чтения
CreateSecureLink Team

Почему ключ в символе # — и как это работает

Простым языком про то, зачем мы кладём ключ после решётки в URL, чем это отличается от обычных параметров, и какие ошибки портят всю безопасность.

Почему ключ в символе # — и как это работает

В Secure Link мы говорим: ключ остаётся в URL после знака решётки.

И что? На практике это значит одну простую вещь. Сервер не видит всё, что идёт после #. Только ваш браузер знает про эту часть.

Допустим, кто-то перехватит запрос к серверу. Увидит шифртекст, но не ключ.

Да, звучит скучно. Однако именно из-за этой мелочи обычная ссылка становится безопасной. Ну, или почти безопасной.

Как устроен URL

Любой адрес в интернете делится на куски:

https://createsecurelink.com/page?search=hello#section1
                     ^^^^^^^^^^^^^^^^^^^^
                     query    fragment
📊 Схема процесса

Часть с ?search=hello называется query. Она идёт на сервер вместе с запросом.

А вот #section1 — это фрагмент. Он остаётся в браузере.

Мы кладём ключ шифрования именно в фрагмент. Сервер получает запрос, отдаёт зашифрованную заметку. Браузер берёт ключ из адресной строки и расшифровывает локально. Сервер про ключ даже не знает.

Что летит по сети на самом деле

Покажу на примере. Вот плохой способ (так делать нельзя):

GET /note/abc123?key=SuperSecretKey HTTP/1.1
Host: createsecurelink.com

Ключ в query — и сервер его увидит. Плохо.

А вот правильный способ:

GET /note/abc123 HTTP/1.1
Host: createsecurelink.com

key=SuperSecretKey ← этого сервер не получает

В логах сервера будет только /note/abc123. Ключ никуда не уходит с вашего компьютера.

Простая схема. И работает.

Зачем такая заморочка

У нас три правила:

  1. 1
    Сервер хранит только зашифрованную каракатицу
  2. 2
    Ключ никогда не попадает на сервер
  3. 3
    Расшифровка происходит у вас в браузере

Получается что-то вроде:

[Ваш браузер] --шифрует--> [Каракатица] --отправляет--> [Сервер]
^                                                   |
|                (ключа нет)                       |
+------------- ключ в URL# ---------------------+
📊 Схема процесса

В итоге сервер физически не может прочитать вашу заметку. У него нет ключа.

Кстати, я сам поначалу думал — зачем такие сложности? Но когда разобрался, понял. Эта система довольно надёжная.

Что делают боты предпросмотра

Telegram, Slack и другие мессенджеры показывают превью ссылок. Их боты ходят по ссылке, но без фрагмента.

То есть бот запросит https://Secure Link.com/note/abc123, а всё после # просто проигнорирует.

Наш сервер в таких случаях:

  • Отдаёт безопасное описание (не раскрывая содержимое)
  • Не пытается быть слишком умным
  • Ставит правильные заголовки кэширования

Заметка остаётся целой. Предпросмотр её не «сжигает».

Ошибки, которые всё портят

Вот где обычно люди прокалываются:

  1. 1
    Редирект портит ключ

Было: /note/abc#key=123 Стало: /note/abc?key=123 (после редиректа)

И ключ попал в query. Не делайте так.

  1. 1
    Аналитика логирует всё подряд

Google Analytics или Яндекс.Метрика могут случайно записать URL целиком. Нужно настроить их правильно.

  1. 1
    Слабое шифрование

Не экономьте на криптографии, серьёзно. Мы используем AES-GCM — проверенная штука.

  1. 1
    Скриншоты

Скрин с ключом в адресной строке — это как татуировка. Навсегда. Лучше избегайте.

  1. 1
    Всё в одном канале

Если ставите пароль на ссылку — отправляйте его отдельно. SMS, другой чат, что угодно.

Как пользоваться правильно

Несколько простых правил:

  • Ставьте «один просмотр» и короткое время жизни
  • Для важного добавляйте пароль (и передавайте его отдельно)
  • Предупреждайте получателя: «Ссылка одноразовая, не пересылай»
  • Сомневаетесь — сожгите заметку вручную после прочтения

Я обычно для паролей ставлю час жизни максимум. Для обычных заметок — сутки хватает.

Итого

URL-фрагмент — простая идея с большими последствиями.

Ключ у получателя, шифртекст на сервере. Всё.

Хотите делиться секретами без следов? Попробуйте одноразовые ссылки. Не сложнее обычной переписки, а спокойствия больше.

Хотя... может, обычного чата вам и хватит. Каждый сам решает.

Готовы попробовать на практике?

Создайте безопасную одноразовую ссылку и убедитесь в надёжности технологии