Salve a tutti, provo a spiegare quello che vorrei realizzare in php, sperando che possa essere anche un modo per aiutare chi come me ha bisogno di questa cosa.
Mi spiego meglio:
devo sviluppare un sistema di download con approvazione. In dettaglio ho due tipologie di utente:
Admin: Può caricare documenti "doc" o "pdf" . I documenti caricati non devono essere nè visibili nè scaricabili.
User: L'utente registrato può visionare la lista dei documenti disponibili ma non può scaricarli. L'unica cosa che può fare è effettuare una richiesta di download che in un secondo momento un admin approva. Solo dopo l'approvazione dell'admin, il download è possibile. L'approvazione dell'admin vale una ed una sola volta. Un secondo download deve essere comunque riapprovato.
Per fare ciò le due problematiche affrontate sono:
1) Fare in modo che i file caricati dall'admin non siamo scaricabili. Per fare ciò ho sfruttato i file .htaccess e .htpasswd all'interno della cartella che corrisponderà alla cartella di upload dei file caricati dall'admin
2) Fare in modo di accedere ai dati nella cartella "topsecret" solo in caso di approvazione.
Per implementare ciò pensavo di far corrispondere all'atto dell'approvazione una "chiave" attraverso la quale poter effettuare il download sfruttando il seguente codice php:
(nell'esempio ho messo un file xml nella cartella "topsecret")
Codice PHP:
<?php
$attachment_location = $_SERVER["DOCUMENT_ROOT"] . "/testuploader/topsecret/test.xml";
echo $attachment_location;
if (file_exists($attachment_location)) {
header($_SERVER["SERVER_PROTOCOL"] . " 200 OK");
header("Cache-Control: public");
header("Content-Type: application/zip");
header("Content-Transfer-Encoding: Binary");
header("Content-Length:".filesize($attachment_location));
header("Content-Disposition: attachment; filename=test.xml");
readfile($attachment_location);
die();
} else {
die("Error: File not found.");
}
?>
Ebbene a rigor di logica mi pare che funzioni tutto, ma voglio capire se vi sono soluzioni migliori o per lo meno se questa soluzione potrebbe portare dei problemi di sicurezza.
Inoltre, avendo provato il codice (e pare funzionare) volevo capire il modo di funzionamento dell'htaccess e htpasswd. Nel senso che se accedo da codice php non è necessario inserire user e password visto che mi fa accedere alla cartella "topsecret" senza eseguire nessun tipo di autenticazione da codice PHP, mentre se provo ad accedere tramite browser mi viene richiesta lo user e la password. Quindi i file in questione servono solo per accessi "dall'esterno" del web server? E' corretto il mio ragionamento?