# Kódaláírások

> A végrehajtható Bricks-kód védelme az adatbázisban történő észrevétlen módosítás ellen: mikor kell aláírás, hogyan készül, és mikor kell újragenerálni.

A kódaláírások védik a végrehajtható Bricks-kódot attól, hogy valaki észrevétlenül módosítsa az adatbázisban.

Aláíráskor a Bricks a kódból a WordPress `wp_hash()` függvényével hash-t készít, és az aláírást a Bricks-adatokkal együtt tárolja. Futtatáskor a Bricks újra kiszámolja a tárolt kód hash-ét, és összeveti a mentett aláírással. Ha nem egyeznek, a Bricks blokkolja a végrehajtást.

## Mely helyeken kell aláírás

A következő Bricks-kódhelyek csak érvényes aláírással futhatnak:

- a **Kód** elem PHP/HTML-je, ha a kódvégrehajtás engedélyezve van
- az **SVG** elem, ha a **Forrás** értéke **Kód**
- a lekérdezési ciklus szerkesztőjének kódja
- komponens lekérdezési tulajdonságok
- globális lekérdezések rekordjai

A **Kód** elem közvetlen CSS- és JavaScript-részét a Bricks CSS/JS kimenetként adja ki, amikor a Kód elem lefut. Az aláírási kapu a végrehajtható PHP/HTML-mezőre és a fenti többi végrehajtható helyre vonatkozik.

## Szükséges jogosultságok

A kódaláírások a kódvégrehajtás biztonsági modelljéhez kötődnek:

- A kódvégrehajtást engedélyezni kell a **Bricks → Beállítások → Egyéni kód** lapon.
- A felhasználónak rendelkeznie kell a Bricks **Kód végrehajtása** jogosultságával.
- A kézi aláírás a szerkesztőben rendszergazdai szintű művelet. A globális újragenerálás a WordPress `manage_options` jogosultságát igényli.
- Ha a `BRICKS_LOCK_CODE_SIGNATURES` állandó értéke `true`, a Bricks a jogosultságoktól függetlenül nem enged új aláírást.
- A veszélyes automatikus szerkesztői aláírás külön, tudatos bekapcsolást igényel, és normál éles webhelyen nem ajánlott. Ehhez is kell az engedélyezett kódvégrehajtás, a **Kód végrehajtása** jogosultság és a feloldott kódaláírás.

Ha az **Aláírás** művelet nem hoz létre vagy nem frissít aláírást, ellenőrizd, hogy a kódvégrehajtás engedélyezve van-e, a felhasználónak megvan-e a **Kód végrehajtása** jogosultsága, rendszergazdai szintű-e a hozzáférése, és nincs-e zárolva a kódaláírás.

AI-kliensek csak akkor tárolhatnak és írhatnak alá PHP-kódot a támogatott Kód mezőkben, ha a PHP-képességeket a `BRICKS_ENABLE_PHP_ABILITIES` állandóval kifejezetten engedélyezted. A csatlakoztatott felhasználónak alkalmazásjelszót kell használnia, és rendelkeznie kell a `manage_options` jogosultsággal és a Bricks **Kód végrehajtása** jogosultságával. A kódvégrehajtás és az aláírászár ellenőrzései ilyenkor is érvényesek. Részletek: [AI-képességek és készségek](https://hub.hellowp.io/hu/plugins/bricks-child/funkciok-ai-kepessegek/).

## Hogyan készíts kódaláírást

Aláírást készíthetsz egyedi elemhez a szerkesztőben, megnézheted az aktuális oldal aláíratlan kódját, vagy a Bricks beállításaiban az egész webhelyre újragenerálhatod az aláírásokat.

### Aláírás a szerkesztőben

A szerkesztőben a végrehajtható, aláíratlan kódú elemek pirossal vannak kiemelve. A szerkezet panel tetején piros ujjlenyomat ikon is megjelenik.

#### Aláírás egy elemhez

Ha egy elemet szerkesztve szeretnél aláírást készíteni, kattints a kódszerkesztő feletti **Kód aláírása** gombra. Ha a kurzor a kódszerkesztőben áll, a `CMD/CTRL + R` is használható. A művelet csak akkor érhető el, ha a szükséges jogosultságok teljesülnek.

Az aláírás után mentsd az oldalt, hogy a módosított kód és az aláírás együtt kerüljön tárolásra.

### Az aláíratlan kód megtekintése és tömeges aláírása

Az aktuális oldal összes aláíratlan kódú elemét a szerkezet panel tetején lévő ujjlenyomat ikonnal nézheted meg és írhatod alá. Ugyanez az ikon az aláíratlan elemeknél a szerkezet panelen is elérhető.

### Az egész webhely aláírása a Bricks beállításaiból

Nyisd meg a **Bricks → Beállítások → Egyéni kód** lapot, és a **Kódaláírások** csoportban kattints a **Kódaláírások újragenerálása** gombra. Ez aláírást készít a Bricks-szel épített összes oldalhoz, sablonhoz, globális elemhez, komponens elemfához, komponens lekérdezési tulajdonsághoz és globális lekérdezési rekordhoz.

A művelethez nonce-szal ellenőrzött rendszergazdai kérés, `manage_options`, kódvégrehajtási jogosultság és feloldott kódaláírás kell. Ha a CSS-fájlok betöltése be van kapcsolva, a sikeres globális újragenerálás után a Bricks újragenerálja a CSS-fájlokat is.

Az újragenerálás előtt érdemes lefuttatni a [Kódellenőrzést](https://hub.hellowp.io/hu/plugins/bricks-child/funkciok-kodellenorzes/), és mentést készíteni.

## A kódaláírás generálásának zárolása

Magas biztonságú környezetekhez a `BRICKS_LOCK_CODE_SIGNATURES` állandó még egy védelmi szintet ad.

Ha az állandó értéke `true`, a Bricks a felhasználói jogosultságoktól függetlenül megakadályozza új kódaláírások létrehozását. A zárat az aláírás előtt kell definiálni:

```php
if ( ! defined( 'BRICKS_LOCK_CODE_SIGNATURES' ) ) {
    define( 'BRICKS_LOCK_CODE_SIGNATURES', true );
}
```

Ha az állandó be van állítva, minden új aláírás kísérlete „Code signatures are locked” (a kódaláírások zárolva vannak) hibával tér vissza.

## Mikor kell újragenerálni az aláírásokat

- **A WordPress sók vagy titkos kulcsok megváltoztatása után:** ha a `wp-config.php` sói megváltoznak, a meglévő Bricks-kódaláírások érvénytelenné válnak.
- **Webhelyköltöztetés után:** ha a webhelyet új domainre vagy szerverre viszed, generáld újra az aláírásokat, ha az új környezetben más WordPress sók vannak.
- **Aláírt kód szerkesztése után:** a végrehajtható Bricks-kód módosítása megváltoztatja az aláírt tartalmat. Nézd át és írd alá a frissített kódot, mielőtt azt várnád, hogy lefut.

## Miért kellenek kódaláírások

A kódaláírások korlátozzák, mire képes egy támadó pusztán adatbázis-hozzáféréssel.

Ha valaki szerkeszteni tudja a Bricks-adatokat az adatbázisban, de aláírást nem tud generálni, rosszindulatú kódot tehet be, de a Bricks nem hajtja végre, mert az aláírás hiányzik vagy érvénytelen.

### A WordPress sók

A WordPress sók a `wp-config.php` fájlban tárolt titkos értékek. A Bricks a WordPress hash-rendszerét használja, ami ezektől a sóktól függ, ezért az egyik környezetben készült aláírás nem biztos, hogy egyezik egy másik, más sóval működő környezetben.

Ha a sók megváltoznak, a Bricks-nek újra kell generálnia az aláírásokat a jelenlegi, megbízható kódból.

### A kódintegritás ellenőrzésének menete

1. **Kód- és aláírásgenerálás:** a kód aláírásakor a Bricks eltárolja a kódból készített hash-t.
2. **A kód lekérése végrehajtáshoz:** a kód betöltésekor a Bricks lekéri a tárolt kódot és aláírást.
3. **Ellenőrzés:** a Bricks újra kiszámolja a lekért kód hash-ét, és összeveti a tárolt aláírással.
4. **Végrehajtási döntés:** ha a hash-ek egyeznek, a kód továbbmehet a végrehajtási folyamatban. A hiányzó vagy eltérő aláírás blokkolja a végrehajtást, és „No signature” vagy „Invalid signature” hibát ad.

## Miért rossz ötlet rendszeresen cserélni a WordPress sókat

Ha megváltoztatod a `wp-config.php` sóit, az összes meglévő Bricks-kódaláírás érvénytelen lesz. Az aláírt kód újbóli futtatásához kézzel kell újragenerálnod őket a **Bricks → Beállítások → Egyéni kód** lap **Kódaláírások** csoportjában.

Egyes bővítmények automatikus sócserét kínálnak azzal az érvvel, hogy nehezebbé teszi a jelszavak feltörését. Ez nem igaz: a WordPress sók nem a felhasználói jelszavak hash-eléséhez kellenek. A sócsere nem ad plusz védelmet a jelszólopás vagy a nyers erejű támadás ellen.

A sócsere viszont ezeket okozza:

- kijelentkezteti az összes felhasználót, mert érvényteleníti a hitelesítési sütiket;
- elrontja a nonce-okat, ami megzavarhatja az űrlapbeküldést és az AJAX-kéréseket;
- tönkreteheti azokat a bővítményeket, amelyek a sókat titkosításra vagy adatintegritásra használják;
- érvényteleníti az összes Bricks-kódaláírást.

Ha a webhelyet nem törték fel, általában nincs gyakorlati ok a sók cseréjére, csak felesleges hibákat és instabilitást okoz.

## Miért nem írja alá a Bricks automatikusan a kódot

A Bricks kézi aláírást kér, hogy az adatbázis megsértése ne vezethessen teljes kódvégrehajtáshoz.

Ha valaki hozzáfér az adatbázishoz, például egy másik bővítmény sebezhetősége vagy kompromittált hozzáférés miatt, kódvégrehajtási jogosultság nélkül is beírhat rosszindulatú kódot a Bricks-adatokba. Ez súlyos, de nem jelenti automatikusan, hogy PHP-t futtathat a szerveren.

Mivel a Bricks a webhely WordPress sóihoz kötött aláírásokat használ, a támadó pusztán adatbázis-hozzáféréssel nem teheti végrehajthatóvá a kódot. A beszúrt kód aláíratlan marad, és a Bricks blokkolja.

Ha a Bricks alapból aláírná a kódot, amikor egy jogosult felhasználó megnyitja a szerkesztőt, ez a védelem megszűnne: a támadó beültethetne rosszindulatú kódot, és megvárhatná, hogy egy jogosult felhasználó betöltse a szerkesztőt. A kézi aláírás kikényszerít egy ellenőrző pontot, mielőtt a kód végrehajtható lenne.

## Veszélyes automatikus aláírás állandói

A Bricks két, tudatosan bekapcsolható állandót tartalmaz olyan szabályozott szerkesztői munkafolyamatokhoz, ahol vállalod az automatikus aláírás kockázatát.

Alapból ki vannak kapcsolva. Logikai `true` értékként add meg őket, ne `'true'` szövegként.

| Állandó | Mit ír alá |
| --- | --- |
| `BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_SAVE` | A szerkesztői mentési kérésben szereplő jogosult végrehajtható kódot: oldal- vagy sablonelemeket, globális elemeket, komponens elemfákat, komponens lekérdezési tulajdonságokat és globális lekérdezési rekordokat. |
| `BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_RERENDER` | A szerkesztői előnézeti és újrarenderelési kérésekben szereplő jogosult végrehajtható kódot. A Bricks visszaadja a generált aláírás-metaadatot a szerkesztőnek, hogy frissítse a memóriabeli elemadatot. Egy későbbi szerkesztői mentés tárolja tartósan a frissített adatot. |

Példa:

```php
if ( ! defined( 'BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_SAVE' ) ) {
    define( 'BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_SAVE', true );
}
if ( ! defined( 'BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_RERENDER' ) ) {
    define( 'BRICKS_DANGEROUSLY_AUTO_SIGN_CODE_ON_BUILDER_RERENDER', true );
}
```

Egyik állandó sem kerüli meg a kódvégrehajtási jogosultságokat és a `BRICKS_LOCK_CODE_SIGNATURES` zárat. Ha a kódvégrehajtás ki van kapcsolva, az aktuális felhasználó nem hajthat végre kódot, vagy a kódaláírások zárolva vannak, a Bricks nem generál automatikusan aláírást.
