Hash-функції md5 (), sha1 () і sha512 () у Cloudflare Rules: як використовувати обережно

У хронології Cloudflare описується оновлення Rules Language: до вже наявної функції sha256() додали md5(), sha1() і sha512(). Далі розберемо, як ці функції працюють у правилах Cloudflare, чим вони відрізняються за вихідними даними і в яких сценаріях варто бути особливо обережними.

Що саме додали в Cloudflare Rules

Мова правил Cloudflare тепер підтримує три додаткові хеш-функції, які можна викликати безпосередньо в умовах і виразах правил:

  • md5()
  • sha1()
  • sha512()

За описом Cloudflare, усі ці функції працюють так само, як вже знайома sha256():

  • на вхід приймають рядок або масив байтів;
  • на виході повертають «сирі» байти (не hex-рядок і не Base64, поки ви самі це не застосуєте).

Вихідна довжина кожної функції

Ключова різниця між функціями — у довжині хешу, яку ви отримаєте. Для проєктування схем зберігання і порівняння це критично:

Function Algorithm Output length
md5() MD5 16 bytes
sha1() SHA-1 20 bytes
sha512() SHA-512 64 bytes

Тобто, якщо у вас є зовнішня система, яка очікує хеш певної довжини (наприклад, 16 байтів для MD5 чи 64 байти для SHA-512), у правилах Cloudflare можна одразу згенерувати значення потрібного розміру.

Як працювати з «сирими» байтами в правилах

Оскільки всі функції повертають байтовий масив, для реальної інтеграції зазвичай потрібне кодування — наприклад, у Base64. У вихідному матеріалі наведено приклад для sha512() у поєднанні з encode_base64():

encode_base64(sha512("hello world"))

У цьому виразі:

  • sha512("hello world") обчислює SHA-512 хеш від рядка "hello world" і повертає 64 байти;
  • encode_base64(...) перетворює ці байти на Base64-рядок, який уже можна:
  • порівнювати з константою у виразі;
  • логувати в системи спостереження;
  • передавати в заголовках до бекенду, якщо цього вимагає протокол.

Той самий підхід застосовується для md5() і sha1(): спочатку отримаєте байти, далі — явне кодування в потрібний формат (Base64, hex або інший, якщо він є в Rules Language).

Типові сценарії використання в Cloudflare Rules

Автори матеріалу прямо вказують: нові функції розраховані на системи, які вимагають саме ці алгоритми. З огляду на це, практичні сценарії можуть бути такими:

  • Сумісність зі спадковими протоколами. Є зовнішній сервіс або старий API, який приймає підпис чи ідентифікатор у вигляді MD5 або SHA-1. Ви можете сформувати цей хеш прямо в правилі Cloudflare і використати його в заголовку-запиті до бекенду.
  • Вирівнювання з існуючими схемами кешування. Якщо бекенд чи CDN-ланцюжок вже будує ключ кешу як, наприклад, MD5 від певної частини URL, можна відтворити це правило на рівні Cloudflare, не змінюючи схему кешування.
  • Внутрішні кореляційні ідентифікатори. Для логування або аналітики може знадобитися хеш від IP, user-agent чи іншої комбінації полів, причому у форматі, з яким уже працюють на стороні SIEM/лог-платформи.

У всіх цих випадках нові функції дозволяють перенести обчислення з бекенду на рівень мережевих правил.

Обмеження і застереження щодо безпеки

У вихідному описі Cloudflare немає безпекових рекомендацій, але важливо не розширювати сферу застосування MD5 і SHA-1 без критичної потреби:

  • MD5 і SHA-1 вважають криптографічно слабкими для цілей на кшталт зберігання паролів або підпису чутливих даних. Якщо мета — безпечна аутентифікація або захист від підробки, їх варто уникати і віддавати перевагу принаймні сімейству SHA-2 (наприклад, sha256() чи sha512()), а в ідеалі — спеціалізованим алгоритмам для паролів.
  • Нові функції зручні саме там, де формат задає зовнішня система і немає можливості змінити алгоритм на більш сучасний.
  • Якщо ви лише проєктуєте новий протокол або схему підпису, наявність md5() та sha1() не є підставою обирати їх. У такому разі доцільніше використати sha256() або sha512().

Де подивитися повну специфікацію

Cloudflare окремо посилається на довідкові сторінки функцій, де наведено деталі сигнатури, типів і додаткових прикладів. Для глибшого налаштування варто звернутися до цих розділів документації:

Ці довідники корисні, якщо треба перевірити точний тип аргументів (рядок проти байтового масиву), підтримку констант, обмеження на розмір вхідних даних або поєднання з іншими функціями Rules Engine.


Джерело: Cloudflare Changelog

Пошук

Закрити