Хотите ссылку, которая загружает изображения (*.png, *.jpg, *.gif) на компьютер пользователя.
Протестирован следующий код из документации для загрузки файла http://php.net/manual/en/function.readfile.php
index.php
<html>
<head></head>
<body>
<a href="download.php?file=nintendo.png">Download</a>
</body>
</html>
download.php
<?php
$file = $_GET['file'];
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
} else {
echo "Ingen fil hittades";
}
?>
Заметили, что вы можете отредактировать ссылку, чтобы вы могли скачать все, если знаете имя файла, даже php файлы.
например:.../download.php? file = download.php Скачайте файл download.php
Можно ли изменить, чтобы можно было загружать изображения? Как сделать безопасную загрузку изображений, когда пользователь нажимает на ссылку?
Вы можете просто использовать загрузку атрибутов, которая является новой для HTML5 и поддерживается Firefox и Chrome, как это, но не знает о браузерах IE
<a id="download" href="img/Chrysanthemum.jpg" download="a.jpg">Download</a>
EDIT: чтобы сделать изображение просто загружаемым, этой строки достаточно.
Content-Disposition: attachment;
Если вы не ограничиваете то, что каждый пользователь может загрузить, я бы усложнил жизнь людям, чтобы они перестали угадывать имена файлов. Вы можете попробовать хэшировать имя файла, поэтому вместо file=nintendo.png
будет file=1be98be84d040d99ca85f5a1786821bf7f4fd37a
и ваш скрипт может затем проверить в базе данных, чтобы найти нужный файл, file=1be98be84d040d99ca85f5a1786821bf7f4fd37a
поиск этого хеша.
Это может остановить людей, угадывающих имена файлов, но это не может помешать людям понять, что вы делаете, кто-то может попробовать разные хэши, такие как SHA-1 и MD5, с любыми именами файлов, которые они в настоящее время знают, и система позволит им загрузить файл. В этом случае неплохо использовать соль, что затруднит процесс шифрования.
Использовать соль очень просто, когда вы генерируете хэш из вашего имени файла, вы добавляете в микс другую переменную, это может быть специальный пароль, который вы знаете, дату, когда файл был добавлен в вашу систему. Все, что только вы узнаете.
Вот пример;
Текущая ссылка: file=nintendo.png
SHA1 Хэш: file=1be98be84d040d99ca85f5a1786821bf7f4fd37a
SHA1 Hash + "s3cr3tp4ssw0rd" Соль: file=184649ed65127047f80a46509d0b7447a837b692
Вы можете видеть, что соль снова изменила хэш. Надеюсь, это даст вам некоторую идею об обфускации и хешировании URL-адресов.
userid
а другое - fileid
. Когда кто-то пытается загрузить файл, ваш сайт проверяет новую таблицу, чтобы убедиться, что есть запись, которая совпадает как с userid
и с userid
fileid
; если да, то разрешите пользователю загрузить файл, если нет, то не позволяйте им. Если вы не хотите идти до такой степени, то, возможно, ваша страница загрузки может разрешать загрузку только файлов изображений. Может фильтровать по расширению.
download.php?id=42
ничего не говорит пользователю о том, каким будет этот файл, и если вы запутаете значения идентификаторов (например, каким-то образом их зашифруете), тогда будет почти невозможно угадать другие значения.