Objavljeno: 2019-07-28

Enkripcija datoteka u Laravelu

Enkripcija datoteka u Laravelu

Kada je potrebno enkriptovati string u Laravelu, dovoljno je koristiti encrypt() helper i ako ste imali zadatak da osjetljive informacije spašavate u bazu, onda ste sigurno i koristili encrypt() helper. Ali šta je sa enkripcijom čitavih datoteka u Laravelu?

Ponekad je i to potrebno, ovisno od zadataka aplikacije, ali ako spašavate medicinske nalaze ili slične datoteke, onda je zbog privatnosti pacijenta i sigurnosti podataka, obavezno prateću dokumentaciju u vidu JPG slika i PDF datoteka, koje se spašavaju na disk/storage, enkriptovati i zaštiti od neovlaštenog pristupa. Neovlašteni pristup ne znači nužno i da je pristup web aplikaciji ili web serveru ugrožen od trećih neželjenih lica, jednostavno može se raditi o situaciju da određeni rang korisnika ne može imati pristup tim datotekama, kao npr. server administrator i želite da osigurate da kontroliran pristup tim datotekama kroz web aplikaciju.

Vjerovali ili ne, rješenje u Laravelu leži u korištenju već spomenute encrypt() helper funkcije. Da, iste one koje koristite za enkripciju osjetljivih podataka/kolona u vašoj bazi podataka.


public function store()
{
	// Get file content in memory
	$fileContent = Storage::get('files/report.pdf');

	// Encrypt the File Content
	$encryptedContent = encrypt($fileContent);

	// Store the encrypted Content on Storage
	Storage::put('files/report.pdf', $encryptedContent);		
}

Naravno, da bi datoteka se mogla pročitati / otvoriti neophodno je istu dekriptovati i ponuditi za preuzimanje.


public function download()
{
	$filePath = 'files/report.pdf';
	
	$decryptedContent = decrypt(Storage::get($filePath));
	
	return \Response::make($decryptedContent, 200, [
		'Cache-Control'         => 'must-revalidate, post-check=0, pre-check=0',
		'Content-Type'          => Storage::mimeType($filePath),
		'Content-Length'        => Storage::size($filePath),
		'Content-Disposition'   => 'attachment; filename="' . basename($filePath) . '"',
		'Pragma'                => 'public',
	]);		
}

Laravel koristi OpenSSL da omogući AES-256 i AES-128 enkripciju, te treba imati na umu da će enkriptovane datoteke zauzimati veći prostor na disku nego originalne datoteke.

Želite postati naš klijent?

Zatražite ponudu