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.