TGViewer
Бестиарий программирования Бестиарий программирования @programming_tales · 1.14K subscribers
Post #614 634

Forwarded from АК-ВС 3 | Анализатор кода

➡️Утечка через сравнение строк

Как думаете, сколько времени занимает такая проверка?
if token == "secret_key":
allow_access()


Почти за мгновение. Но иногда эти миллисекунды могут выдать секрет.

🔍В чем дело

Во многих реализациях строки сравниваются посимвольно.

Алгоритм обычно выглядит так:
1) Сравнить первый символ
2) Если совпал - второй
3) Если совпал второй - третий
И так далее

Если символ не совпал, тогда сравнение заканчивается.

📝Где появляется проблема

Предположим секретный токен
A9F4K2

Если атакующий отправит
BXXXX

Сравнение закончится на первом символе.

Если отправить AXXXX, то проверка пройдет чуть дальше.

В результате время выполнения будет немного отличаться.

Если отправить много запросов и измерять время ответа, можно постепенно угадывать символы по одному.

✔️Как решают проблему

Используют сравнение за константное время.

Алгоритм сравнивает все символы, даже если первый уже не совпал.

Для этого во многих языках есть специальные функции, например:

GO
subtle.ConstantTimeCompare(a, b)


JavaScript
crypto.timingSafeEqual(a, b)


😎Как часто вы видели проверки секретов через обычное ==?
  • 👍 16
More from @programming_tales
  1. Oct 2, 2026Запись вебинара: Go vet не поможет... Как сделать свой анализатор кода для Go?
  2. Oct 2, 2026В целях нетворкинга и просто так приглашаю коннектиться в TenChat — что-то типа LinkedIn.…
  3. Sep 29, 2026Сегодня коллега демонстрирует, как визуально проявляют себя баги в Java коде: Нашёл ошибки…
  4. Sep 29, 2026photo post
  5. Sep 28, 2026На днях выступал с докладом на форуме "Безопасность транспортных средств", организованном…
  6. Sep 28, 2026photo post
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →