CSRF (Cross-Site Request Forgery) to atak, który zmusza użytkownika do wykonania niechcianych działań w aplikacji, w której jest zalogowany. Ataki CSRF mogą prowadzić do nieautoryzowanych zmian danych, wykonania działań administracyjnych lub innych szkodliwych operacji.
Metody ochrony przed CSRF:
- Tokeny CSRF: Wykorzystanie unikalnych tokenów CSRF, które są generowane dla każdej sesji użytkownika i weryfikowane przy każdej operacji wymagającej uwierzytelnienia.
<form method="post" action="/submit"> <input type="hidden" name="csrf_token" value="UNIKALNY_TOKEN"> <!-- inne pola formularza --> <input type="submit" value="Submit"> </form>
- Sprawdzanie referera: Weryfikacja nagłówka referer, aby upewnić się, że żądanie pochodzi z zaufanego źródła.
- Ograniczenie czasu życia sesji: Skrócenie czasu życia sesji, aby zmniejszyć ryzyko wykorzystania tokenów CSRF.
- SameSite cookies: Ustawienie atrybutu
SameSite
dla ciasteczek, aby ograniczyć ich wysyłanie do stron trzecich.
Set-Cookie: sessionId=abc123; SameSite=Strict;
Przykład implementacji tokenów CSRF w Node.js z użyciem Express:
const express = require('express'); const csrf = require('csurf'); const bodyParser = require('body-parser'); const app = express(); const csrfProtection = csrf({ cookie: true }); const parseForm = bodyParser.urlencoded({ extended: false }); app.use(require('cookie-parser')()); app.use(csrfProtection); app.get('/form', (req, res) => { res.send(`<form method="post" action="/submit"> <input type="hidden" name="_csrf" value="${req.csrfToken()}"> <input type="submit" value="Submit"> </form>`); }); app.post('/submit', parseForm, csrfProtection, (req, res) => { res.send('Form data is valid'); }); app.listen(3000, () => console.log('Server running on port 3000'));
Ochrona przed CSRF jest kluczowa dla zapewnienia bezpieczeństwa aplikacji internetowych i ochrony użytkowników przed potencjalnymi atakami.