# Chráňte formuláre a požiadavky tokenmi CSRF

> Vytvorte token cez $.csrf(), pošlite ho spolu s požiadavkou a overte ho v middleware, aby sa požiadavky z iných stránok odmietli.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: sk
Content-SHA256: fa05b158aee2c725942d50afe277bd38af72fba95632411b753a02515dae7397
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

Útok CSRF spôsobí, že prehliadač prihláseného používateľa odošle požiadavku, ktorú nikdy nechcel odoslať. Obranou je token, ktorý stránka dostane od vášho servera a ktorý sa musí vrátiť s každou požiadavkou meniacou dáta. Total.js token vytvára aj overuje za vás, ale iba ak je v súbore `config` nastavené `secret_csrf` (bez neho kontrola vždy prejde).

`$.csrf()` vráti token (a `@{csrf}` ho vypíše v pohľade). Je to šifrovaná hodnota viazaná na **IP adresu** a **user agent** klienta a vyprší po čase v `$csrfexpiration` (predvolene 30 minút). `DEF.onCSRFcheck($)` overí token, ktorý sa vrátil, prečítaný z hlavičky `x-csrf-token` alebo z parametra `csrf` v query stringu, a vráti `true` alebo `false`. Pri bežných trasách ju voláte sami, najpohodlnejšie z middleware, ktorý pridáte pomocou `#csrf` ku každej trase meniacej dáta. Trasy WebSocket s príznakom `@csrf` sa kontrolujú automaticky.

```text config
secret_csrf : change-this-secret-in-production
```

```js definitions/csrf.js
MIDDLEWARE('csrf', function($, next) {
	if (DEF.onCSRFcheck($))
		next();
	else
		$.invalid(403);
});
```

```js controllers/csrf.js
exports.install = function() {
	ROUTE('GET /form/', form);
	ROUTE('POST /transfer/ @json #csrf', transfer);
};

function form($) {
	$.json({ csrf: $.csrf() });
}

function transfer($) {
	$.json({ ok: true, amount: $.body.amount });
}
```
