Zabezpečení složky ze soubory

marcelxy
Člen | 70
+
0
-

Zdravím,
potřeboval bych zabezpečit složku ze soubory (přílohy,obrázky,pdf,atd..)
využívané v různých časti webu aby nebyly volně přístupné bez přihlášení případné přístupových práv,
tzn. aby nikdo kdo případně zná adresu se knim bez přihlášení případně autorizace nedostal.
Zatím je mám všechny umístěné ve složce www/data ale kdokoliv kdo zná adresu se knim i bez přihlášení dostane.
když je umístím někam do chráněné části webu tak se knim nedostanu ani po přihlášení.
jak se tato problematika řeší?
díky za rady

Editoval marcelxy (30. 1. 2021 12:40)

Petr Parolek
Člen | 455
+
-3
-

Ahoj, řešímto jednodušše v presenteru:

	public function actionDownloadDocumentPdf(int $id): void
	{
		$item = $this->someRepository->findOneBy(['user' => $this->getUser()->id, 'id' => $id]);

		if (!$item) {
			$this->error('Položka nebyla nalezena!');
		}

		if ($item->getItemPdfUrl() !== null) {
			$httpResponse = $this->context->getByType('Nette\Http\Response');

			$httpResponse->setHeader('Content-type', 'application/pdf');

			$file_path = __DIR__ . '/../../../www/../uploaded/' . $this->getUser()->id . '/'
				. $item->getPdfUrl();
			$file_content = file_get_contents($file_path);

			$httpResponse->setHeader('Content-Disposition', 'inline; filename="' . basename($file_path) . '"');

			$httpResponse->setHeader('Content-Transfer-Encoding', 'binary');
			$httpResponse->setHeader('Content-Length', (string) filesize($file_path));
			$httpResponse->setHeader('Accept-Ranges', 'bytes');

			$this->sendResponse(new \Nette\Application\Responses\TextResponse($file_content));
		} else {
			$this->error('Položka nebyla nalezena!');
		}
	}

Editoval ppar (30. 1. 2021 12:52)

lookass
Člen | 54
+
-2
-

Jestli používáš Apache a jestli jde o zabezpečení souborů, aby nebyly přístupné přes prohlížeč např. takto www.domena.cz/files/file.pdf, tak to řeším pomocí .htaccess

Order Allow,Deny
Deny from all

Nicméně na nginx.com dokládají, že to není zrovna efektivní, takže by mě taky zajímalo, jak to udělat správně. (Za předpokladu, že chci používat Apache)

Editoval lookass (30. 1. 2021 15:25)

Marek Bartoš
Nette Blogger | 1280
+
+5
-

Soubory si uložíš do veřejně nedostupné složky a jejich odesílání vyřešíš skrze presenter, který podle url adresy najde příslušný soubor a odešle hlavičky. Hlavičky si pak přečte webserver a sám už se postará o odeslání souboru.
Je možné si načíst soubor v php a odeslat například přes TextResponse, ale zbytečně to zvyšuje nároky na výkon.

Řešení s jednotlivými webservery se ale různí: