Я працюю над покращенням швидкості завантаження сайту 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. Ви отримаєте ексклюзивну знижку перед запуском