ZabezpečenÍ uploudovaných soborů

karel.nev
Člen | 21
+
0
-

Měl bych jeden spíše takový obecný dotaz. Máte nějaký nápad, zkušenost, jak co nejlépe zabezpečit uploadované soubory na webu? Nějak je zaheshovat? Budu rád za jakýkoliv tip.

Marek Bartoš
Nette Blogger | 1164
+
+1
-

Jsou dvě varianty. Buď vygeneruješ cestu, která se nedá uhodnout a necháš soubory ve veřejné složce a pro získání souboru bude stačit znalost url, nebo soubory uložíš někde, kde k nim nebude mít uživatel přístup a budeš je posílat přes php. Pokud soubor uložíš na disku do neveřejné složky, tak ti pomůže webserver. Stačí odeslat hlavičku, ukončit běh aplikace a webserver už se o odeslání souboru postará sám. Nginx má X-Accel, Apache X-Sendfile

karel.nev
Člen | 21
+
0
-

@Mabar Děkuji za informace. Pokud to dobře chápu, můžu tedy vytvořit složku např. www/soubory a ní mít htaccess s daty viz níže? A k souborům poté přistupovat v aplikaci přes header()?

<?php
header('Content-Type: '.$file->mime);
            header("Content-Transfer-Encoding: Binary");
            header("Content-disposition: inline; filename=".$filename.");
            readfile($file_url);
            exit;
?>

<Files .htaccess>
Order deny
Deny from all
</Files>
<IfModule mod_autoindex.c>
Options -Indexes
</IfModule>

Marek Bartoš
Nette Blogger | 1164
+
0
-

Ideálně mít soubory mimo www, v té mít opravdu jen public data, pro zjednodušení.

Celé to funguje tak, že ti přijde request na soubor /images/example.png, ten se bude hledat v rootu webu, tedy /www/images/example.png. Webserver request na neexistující soubor nasměruje na index.php, kde spouštíš nette aplikaci. Pomocí routy požadavek na soubor pošleš na presenter. Ten podle jména souboru najde jeho neveřejně uloženou alternativu, v hlavičce odešle reálné umístění souboru a ukončí běh appky. O zbytek se už postará webserver.

Editoval Mabar (18. 9. 2019 18:24)

ic
Člen | 430
+
+2
-

kdysi jsem podobnou věc řešit na úrovni webserveru nginx pomocí návodu přímo od ngixu na https://www.nginx.com/…-nginx-plus/

soubory jsou nepřístupné, pokud k nim není přiřazen správný hash a expirace … ?md5=AUEnXC7T-Tfv9WLsWbf-mw&expires=1483228740 a tím že se nemusí statické soubory hnát přes nette aplikaci se ušetří i nějaký ten kus výkonu.