Jag har gjort en intern del på en webbplats där man loggar in och kan läsa nyheter etc. Till nyheterna kan man bifoga filer och eftersom dessa lagras nedanför roten kan man (om man har tur) gissa sig till ett filnamn och ladda ner filen i fråga. Dessvärre har jag inte tillåtelse att gå ovanför roten så det är inte ett alternativ.
Vad är alternativen? Ska jag lagra filerna i databasen (MySQL)? Finns det nackdelar med det?
Det kan du göra, eller ge filerna ett märkligt namn (t.ex. filnamnet genom md5() ) som du lagrar i databasen. Då blir det iallafall väldans svårt att gissa filnamnen.
Jag lyckades fundera ut det, så jag kan väl posta koden om det skulle hjälpa någon i framtiden. Jag skapade en php-fil kallad "download.php" innehållande nedanstående kod, och laddar ner filer genom att länka till exempelvis "download.php?file=1, där 1:an är filens id i databasen.
if (isset($_GET['file'])) {
$fileid = (int)$_GET['file'];
$res = query("SELECT * FROM test_files WHERE id = $fileid");
if (mysql_num_rows($res)) {
$row = mysql_fetch_assoc($res);
header('Content-Type: '.$row['filetype']);
echo $row['binaryfile'];
}
}