# Űrlapok és kérések védelme CSRF-tokenekkel

> Hozz létre tokent a $.csrf()-fel, küldd el a kéréssel, és ellenőrizd egy middleware-ben, hogy a más oldalakról érkező kéréseket elutasítsd.

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

A CSRF-támadás arra készteti a bejelentkezett felhasználó böngészőjét, hogy olyan kérést küldjön, amit sosem akart. A védekezés egy token, amelyet az oldal a szervertől kap, és amelynek minden adatot módosító kéréssel vissza kell érkeznie. A Total.js létrehozza és ellenőrzi a tokent helyetted, de csak akkor, ha a `config` fájlban be van állítva a `secret_csrf` (nélküle az ellenőrzés mindig sikeres).

A `$.csrf()` egy tokent ad vissza (a `@{csrf}` pedig kiírja egy view-ban). Ez egy titkosított érték, amely a kliens **IP-címéhez** és **user agentjéhez** kötött, és a `$csrfexpiration` ideje után lejár (alapértelmezés szerint 30 perc). A `DEF.onCSRFcheck($)` ellenőrzi a visszaérkezett tokent, amelyet az `x-csrf-token` fejlécből vagy a `csrf` lekérdezési paraméterből olvas, és `true` vagy `false` értéket ad vissza. A hétköznapi útvonalaknál te hívod meg, a legkényelmesebben egy middleware-ből, amelyet a `#csrf` jellel adsz minden adatot módosító útvonalhoz. A `@csrf` jelzőjű WebSocket-útvonalakat automatikusan ellenőrzi.

```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 });
}
```
