# SVG-feltöltések

> SVG-fájlok feltöltésének engedélyezése szerepkörönként, a feltöltéskori tisztítás, a tisztítás kikapcsolása és az engedélyezett címkék bővítése.

A WordPress alapból nem engedi az SVG-fájlok feltöltését, mert az SVG XML-alapú képformátum, amely rosszindulatú kódot is tartalmazhat. Különösen kockázatos, ha ismeretlen forrásból jön, vagy megbízhatatlan felhasználó tölti fel.

## SVG-feltöltés bekapcsolása

Az SVG-feltöltést szerepkörönként kapcsolhatod be a **Bricks → Beállítások → Általános** lapon, az **SVG-feltöltések** csoportban.

![Az SVG-feltöltések csoport a szerepkörök kapcsolóival](./kepek/funkciok-svg-feltoltes-beallitas.webp)

*Az SVG-feltöltések csoport a szerepkörök kapcsolóival* (https://minta-bolt.hu/wp-admin/admin.php?page=bricks-settings)

A képen az **SVG-feltöltések** csoport látszik: minden szerepkörhöz egy kapcsoló tartozik.

- A Bricks csak azokat a szerepköröket listázza, amelyek szerkeszthetnek bejegyzéseket.
- Ha egy szerepkört bekapcsolsz, a Bricks megadja neki a `bricks_upload_svg` jogosultságot, és az ezzel a jogosultsággal rendelkező felhasználóknak engedélyezi az `svg` és `svgz` MIME-típusú feltöltéseket.
- Egy-egy felhasználónál külön is felülbírálhatod a hozzáférést a felhasználó WordPress-profiljában: az egyéni beállítás a szerepkör alapértelmezésétől függetlenül engedélyezhet vagy tilthat.

Ha egy felhasználónak engedélyezve van az SVG-feltöltés, a Bricks a WordPress feltöltési folyamata közben megpróbálja megtisztítani a feltöltött SVG-fájlt.

## Mit tisztít a Bricks

A Bricks azokat a feltöltéseket tisztítja, amelyek típusa `image/svg+xml`. Feltöltéskor:

- engedélyezi a `.svg` és `.svgz` feltöltést az SVG-jogosultsággal rendelkező felhasználóknak;
- az SVG-t az `enshrined/svg-sanitize` tisztítókönyvtáron futtatja át;
- a megtisztított SVG-kimenetet tömöríti (minifikálja);
- felismeri a gzip-tömörített SVG-tartalmat, a tisztításhoz kicsomagolja, utána újra becsomagolja;
- hibaüzenettel blokkolja a feltöltést, ha a tisztítás nem sikerül;
- eltávolítja azt a kötelező 1 képpontos méretet, amelyet a WordPress az SVG-mellékletekhez rendelhet.

Az SVG-fájlfeltöltés más, mint az **SVG** elem **Forrás: Kód** működése. Az SVG elembe beillesztett SVG-forráskód végrehajtható Bricks-kódnak számít, ezért kódfuttatási jogosultság és érvényes kódaláírás kell hozzá.

## A tisztítás kihagyása

Bölcs dolog tisztítani a WordPressbe feltöltött SVG-ket, de előfordulhat, hogy a Bricks tisztítóját ki akarod hagyni, mert egy másik megbízható folyamat végzi a tisztítást. Ehhez használd a `bricks/svg/bypass_sanitization` szűrőt:

```php
add_filter( 'bricks/svg/bypass_sanitization', function( $bypass, $file ) {
  // A Bricks tisztításának kihagyása előtt végezz saját ellenőrzést.
  return $bypass;
}, 10, 2 );
```

A szűrő paraméterei:

- `$bypass`: logikai érték; `true` visszaadásával kihagyod a Bricks tisztítását;
- `$file`: a feltöltött fájl tömbje a `$_FILES` változóból.

Ha minden SVG-feltöltésnél ki akarod hagyni a tisztítást:

```php
add_filter( 'bricks/svg/bypass_sanitization', '__return_true' );
```

Csak akkor hagyd ki a tisztítást, ha teljesen te felügyeled az SVG forrását, vagy a fájl tárolása előtt másik megbízható tisztító fut.

## A tisztító engedélyezett címkéi és attribútumai

A tisztító az `enshrined/svg-sanitize` könyvtár alapértelmezett engedélyezett címkéit és attribútumait használja. Ritka esetben szükség lehet további SVG-címkék vagy attribútumok engedélyezésére, magas biztonságú környezetben pedig szűkítheted a listákat. A Bricks két szűrőt biztosít:

```php
add_filter( 'bricks/svg/allowed_tags', function( $tags ) {
  $tags[] = 'filter'; // A „filter” címke engedélyezése.
  return $tags;
} );
```

```php
add_filter( 'bricks/svg/allowed_attributes', function( $attributes ) {
  $attributes[] = 'filterUnits'; // A „filterUnits” attribútum engedélyezése.
  return $attributes;
} );
```

Óvatosan használd ezeket: további címkék vagy attribútumok engedélyezése újra biztonsági kockázatot hozhat, főleg azoknál az attribútumoknál, amelyek külső erőforrásra hivatkozhatnak vagy szkriptszerű viselkedést indíthatnak.

## Biztonsági ellenőrzőlista

Az SVG-feltöltés bekapcsolása előtt:

- csak megbízható szerepköröknek vagy megbízható egyéni felhasználóknak engedélyezd;
- csak megbízható forrásból származó SVG-ket tölts fel;
- hagyd bekapcsolva a tisztítást, hacsak nincs más megbízható tisztítód;
- nézd át az egyéni engedélyezett címkéket és attribútumokat;
- ne tekintsd a médiafeltöltéskori tisztítást védelemnek az SVG elem forráskódjára: az a kódfuttatási és kódaláírási biztonsági modellt követi.
