Как я защищаю Laravel-приложения: CSRF, XSS, запросы и валидация

🔐 CSRF: защита от подделки запросов

Laravel по умолчанию защищает от CSRF-атак во всех POST, PUT, PATCH, DELETE-запросах. Всё, что нужно — вставить @csrf в формы:

<form method="POST" action="/submit">
  @csrf
  ...
</form>
Если используешь JS-фреймворк, не забывай отправлять CSRF-токен в заголовке:

axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]')    .getAttribute('content');
Совет: не отключай VerifyCsrfToken middleware без крайней необходимости.

🧼 XSS: защита от скриптов в HTML

Самый частый способ XSS — пользователь вводит <script>>, а ты его отображаешь без фильтрации. Laravel по умолчанию экранирует всё, что выводится через {{ }}:

{{ $user->name }}  // безопасно
{!! $user->bio !!} // опасно, если не фильтруешь
Правило простое: — {{ }} — безопасно — <{!! !!} — только если ты точно знаешь, что делаешь Если нужно отобразить HTML, используй проверенные фильтры, например strip_tags(), или кастомные Blade-компоненты, где ты сам контролируешь контент.

📥 Валидация данных: фильтрация на входе

Никогда не доверяй данным из запроса. Даже если форма выглядит нормальной, пользователь может легко отправить что угодно через Postman. Используй Form Request классы:

php artisan make:request StorePostRequest

public function rules()
  {
    return [
    'title' => 'required|string|max:255',
    'body' => 'required|string',
    ];
  }
И в контроллере:

public function store(StorePostRequest $request)
  {
    // данные уже валидированы
  }
Удобно, безопасно, и код чище.

✔ SQL-инъекции: Eloquent защищает, но не расслабляйся

Laravel использует PDO и привязку параметров, так что обычные SQL-инъекции тебе не страшны, если ты используешь Eloquent или Query Builder:

User::where('email', $request->input('email'))->first(); // безопасно
Но если ты пишешь сырой SQL — будь внимателен:

// НЕПРАВИЛЬНО — опасно
DB::select("SELECT * FROM users WHERE email = '$email'");

// ПРАВИЛЬНО — безопасно
DB::select("SELECT * FROM users WHERE email = ?", [$email]);

🔒 Headers и конфиги

В .env не забывай отключить отладку в продакшене:

APP_DEBUG=false
Убедись, что настроен HTTPS и APP_URL=https://твой_сайт Хедеры можно добавить через middleware или .htaccess:

Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-XSS-Protection "1; mode=block"

✅ Бонус: rate limiting

Laravel легко позволяет ограничивать количество запросов. Например:

Route::middleware('throttle:60,1')->group(function () {
  Route::post('/login', 'AuthController@login');
});
Это значит: не больше 60 запросов в минуту с одного IP.

✅ Вывод

Laravel многое делает за тебя, но ответственность всё равно на тебе. Проверяй входящие данные, не открывай доступ к тому, что не нужно, и не игнорируй базовые настройки. Меньше «а, и так сойдёт» — больше «а вдруг?» Так живут проекты, которые не ломаются при первой же бот-атаке или баге.

4.07.2025

5
A B i U S JS

PHP HTML CSS
Чат
    Для входа только имэйл или имя и апроль
    Можно сменить аватар
    Имэйл Ваше имя
    Пароль