Cloudflare Turnstile проти токенів CSRF

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 11 листопада, 2025
Задумалися над тим, як покращити швидкість завантаження форм у вашому Laravel-додатку? У нашій статті ми розглядаємо, як використання Cloudflare Turnstile може допомогти вам зменшити навантаження та при цьому забезпечити надійний захист від спаму. Читайте далі, щоб дізнатися більше про цю корисну технологію

Я працюю над покращенням швидкості завантаження сайту laravelshift.com. Мені вдалося досягти понад 90% кешування, зосередившись на найбільш відвідуваних контентних сторінках. Тепер я планую кешувати кілька форм з відносно високим трафіком, зокрема "Can I Upgrade Laravel" та "Convert curl to Http".

Оскільки це форми у додатку на Laravel, я додаю CSRF-токен за допомогою директиви @csrf у Blade. Це призводить до вставки прихованого поля <input> на сторінці з унікальним, випадковим значенням, яке також фіксується у сесії користувача.

Оскільки CSRF-токен залежить від сесії, він створює динамічний контент на сторінці, що робить її некешованою. Якби я спробував кешувати, користувачам, ймовірно, з'являлася б 419 помилка при подачі. Для можливості кешування я люблю видаляти CSRF-токен.

Це змусило мене задуматися: Чи дійсно мені потрібен CSRF-токен? Частина мене вважає, що CSRF-токени допомагають уникнути спаму, але їхнє призначення дещо інше. CSRF означає Cross-Site Request Forgery, і його метою є запобігання тому, щоб інші сайти надсилали дані або виконували дії від імені ваших користувачів, наприклад, видалення одного з ваших серверів Forge.

У коді це означає, що ми додаємо токен до даних форми. Під час подачі він перевіряється на відповідність з токеном в сесії користувача. Якщо токени не збігаються, Laravel відхиляє подачу. А що, якби ми могли додати щось інше до форми, що не залежало б від сесії, але все ще забезпечувало певний рівень безпеки?

Тут на допомогу приходить Cloudflare Turnstile. Він додає виклик до сторінки — він може бути як видимим, так і невидимим для користувача. В невидимому режимі Turnstile виконує певну "роботу" у фоновому режимі за допомогою JavaScript, і більшість ботів не можуть впоратися з цим.

Оскільки Turnstile використовує JavaScript, він завантажується на стороні клієнта, що дозволяє сторінці бути кешованою. Це виявилося виграшним варіантом для мене: по-перше, я можу кешувати популярні форми, а по-друге, я отримав деякий захист від спаму. Turnstile значно ефективніше справляється з цією задачею завдяки викликам та колективному інтелекту.

Проте, як завжди, існує компроміс. CSRF та Turnstile мають різні цілі. У моєму випадку це публічні форми (неавтентифіковані), і мені не важливо, якщо хтось підробить їхню подачу з іншого сайту. Додатково, Turnstile налаштований за доменом, тому виклик не буде виконуватись з іншого сайту, отже, дані форми міститимуть пропущене або неправильне значення.

Врешті-решт, хоча Turnstile, ймовірно, підвищив мій захист від спаму, я приймаю будь-які ризики, які можуть виникнути внаслідок видалення CSRF-токена. Можливість кешування цих форм для мене була важливішою. Завдяки цьому laravelshift.com тепер на 98% кешований.

Якщо ви зацікавлені у впровадженні Cloudflare Turnstile, я використовував ryangjchandler/laravel-cloudflare-turnstile. Є детальний звіт у попередній статті Laravel News.

Якщо вас цікавить покращення швидкості завантаження ваших сторінок та зменшення трафіку на веб-сервер, підпишіться на ранній доступ до мого майбутнього курсу Fast Laravel. Ви отримаєте ексклюзивну знижку перед запуском