Правильный способ хранения частных изображений на сервере?

1

Я написал PHP-скрипт для извлечения изображений, которые НЕ находятся в папке public_html. Скрипт аутентифицирует, у пользователя есть разрешение на просмотр изображения, а затем его отображение. Разрешения для изображения установлены на "0755"

Это безопасный метод, позволяющий другим людям просматривать частные изображения? Хеширование имени файла изображения добавит преимущества безопасности? Есть ли другие альтернативные методы, которые могли бы улучшить этот скрипт?

скрипт image_retrieval.php

<?php
include '../user_verification.php';
$image_request = $_GET['image_request'];
$pic = file_get_contents("/home/username/images/'.$image_request.'");
header('Content-type: image/jpeg');
echo $pic;
?>

скрипт display_image.php

    <?php
include '../world/verification.php';
$image_request = $_GET['image_request'];
echo"<img src='http://www.domainname.com/request_image.php?userid=$userid&image_request=$image_request'>";
?>
<form id='image_requester' method='get' action='display_image.php'>
    <input type="text" id="image_request" name="image_request">
    <input type="hidden" value="<?echo"$userid";?>" id="userid" name="userid">
    <input type="submit" value="request">
</form>
Теги:
security
image
server
file-management

2 ответа

1
Лучший ответ

Поскольку изображения не являются общедоступными, это достаточно хорошо. Единственная хорошая вещь в хэшированных именах заключается в том, что они были бы более уникальными, и вы могли бы хранить их все под одним каталогом, но если бы вы действительно хотели, я бы рекомендовал использовать временные метки, поскольку это не будет сталкиваться с другими изображениями когда-либо!

В противном случае сохранение изображений в виде хэшей будет полезно только в том случае, если слой auth каким-то образом скомпрометирован. Но если это произойдет, то незадолго до того, как кто-то сможет перечислить все.

Из кода, который вы опубликовали выше, кажется, что все изображения находятся в одном месте, что бы я делал, это хранить изображения каждого пользователя отдельно, так что даже если уровень аутентификации каким-то образом скомпрометирован для человека, только изображения лиц подвержены риску, а не все это. Если необходимо, используйте их, как вы сказали, или сохраните их с такими именами, которые не сталкиваются друг с другом, сохраняя ссылку на это изображение в базе данных.

0

В PHP скрипт обрабатывает аутентификацию, и как только он будет проверен, он установит несколько заголовков ответов с "X-Sendfile", который сообщает веб-серверу предоставить файл; сценарий заканчивается, и веб-сервер берет верх.

Проверь это:

http://blog.jasny.net/articles/how-i-php-x-sendfile/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню