La mia situazione:
Sto creando un'applicazione web con PHP che consente agli utenti di eseguire la scansione dei loro file alla ricerca di virus. Permette all'utente di caricare i propri file tramite il tipo di input "file" html o tramite un URL. Ho costruito con successo il lato html e PHP delle cose e gli utenti sono in grado di caricare correttamente i file sul mio server. Sto usando Windows Server 2012 R2 con IIS come mio server.
La mia domanda:
Per quanto ne sappia, c'è poca o nessuna sicurezza in atto (lato script e lato server) per evitare vulnerabilità di sicurezza / attacco sul mio sito web o, peggio, sul server stesso. Sono consapevole che gli autori di attacchi potrebbero potenzialmente caricare ed eseguire file che possono hackerare il mio server. Quindi, che cosa posso fare per provare ad eliminare questi problemi .
Cose di cui sono a conoscenza:
A causa della ricerca che ho condotto, è a mio avviso che potrei potenzialmente fare quanto segue per rafforzarmi, tuttavia queste sono tutte teorie e non ho idea di come metterle effettivamente in atto (quindi perché sono chiedendo):
-
Limitazione sui tipi di file (Sì, potrei potenzialmente bloccare i file .php, ma ad esempio - Non riesco a bloccare i file .exe comuni in quanto l'utente probabilmente scansionerebbe un eseguibile) Qual è il giusto equilibrio per questo tipo di servizio, poiché limitare troppi tipi di file rimuove solo l'usabilità
-
Archiviazione di file caricati in una diversa unità - La mia directory del sito è nell'unità C e ho un disco D vuoto che potrei usare. Come disabilito il server dall'eseguire qualcosa nell'unità specifica? Come posso impedire agli hacker di navigare su quell'unità e di eseguire i file caricati?
Cose che ho provato:
- Ho creato una funzione per rinominare il file caricato in un hash MD5 di esso, con un ID univoco all'inizio, quindi l'utente non può identificare facilmente il file.
- Tipo di file limitato per rimuovere i caricamenti .php? Forse ce ne sono altri che potrebbero essere validi per il mio scopo?
Conclusione:
Quindi essenzialmente, oltre alle risposte alle domande minori di cui sopra. Sto cercando un elenco di azioni che posso adottare per rafforzare l'applicazione e il server, per eliminare eventuali minacce. Grazie
Codice:
Come nota a margine, qui sotto puoi vedere il mio codice. Nel caso capiti qualcosa di serio lì dentro. O ci sono altre misure di sicurezza che possono essere aggiunte al codice:
PHP:
$upload_directory = "uploads/";
$uploaded_file = $upload_directory . basename($_FILES["file"]["name"]);
$upload_ok = 1;
$image_file_type = pathinfo($uploaded_file, PATHINFO_EXTENSION);
// check for files bigger then 8mb
if($_FILES["file"]["size"] > 8388608){
print "your file exceeds 8mb";
$upload_ok = 0;
exit();
}
// only allow certain file types
if($image_file_type != "jpg" && $image_file_type != "png" && $image_file_type != "jpeg" && $image_file_type != "gif"){
print "invalid file type";
$upload_ok = 0;
exit();
}
// upload it
if($upload_ok != 0){
move_uploaded_file($_FILES["file"]["tmp_name"], $uploaded_file);
}
HTML:
<form method="post" action="index.php" enctype="multipart/form-data">
<label>Select Desired File</label><br>
<input type="file" name="file" id="file">
<input type="submit" name="submit" value="Scan File">
</form>