2013-03-28 4 views
0

В настоящее время я разрабатываю хранилище изображений на MVC3 и задаюсь вопросом, как ограничить доступ к изображениям. Если я вставляю изображение в HTML-вши <img src="/ImagesFolder/image0001.jpg">, он будет показан правильно, но любой, кто напишет полный путь в браузере, получит это изображение тоже. Я не могу это сделать. Одним из способов является встраивание изображения в качестве base64 string, но оно подходит только для небольших изображений, у меня большие.ограничение доступа к файлам

Я видел рекомендации по созданию действия для доступа к изображениям и использовал что-то вроде <img src="/GetImage?ID=1123">, но на этой странице GetImage я по-прежнему буду использовать методы прямого или базового 64? и в первом случае полный путь к файлу изображений будет переведен в родительский вид и все еще можно увидеть в свойствах изображения?

Есть ли способ использования System.Drawing.Image в <img src=""> или любым другим способом? Знаете ли вы какие-либо образцы?

+0

Если вы создаете страницу «GetImage», то на этой странице вы извлекаете изображение с этим идентификатором и выводите весь контент с заголовком исходного файла изображения. Но опять же, вы упрощаете угадывание имен файлов изображений, подобных этому. Можно просто начать гадать 'ID'. Правильно? –

ответ

1

Один из способов сделать это - поместить все изображения в путь, который не публикуется http-сервером. Таким образом, в браузере нет прямого доступа пользователей.

Скрипты сами находятся на сервере, поэтому они могут получить доступ к этому пути. Ваш метод доступа к изображениям должен быть сценарием, который возвращает фактические данные и идентифицирует себя как данные, которые он обслуживает как изображение/jpeg для jpegs, например. Таким образом, если кто-то обращается к методу GetImage другими способами, чем тот, который вы разработали, скрипт может обнаружить его (реферистом или другими средствами) и не возвращать ничего.

+0

Принятый способ заключался в том, чтобы хранить временные URL-адреса в БД, принимать изображения через GetImage? URL = действие tempUrl, проверять права пользователя и записывать содержимое изображения непосредственно в Response.OutputStream при действии GetImage. Изображения сохраняются в папке notPublished. Спасибо всем! – versus

0

Я думаю, что решение «обращение к изображениям», которое вы упомянули, является самым простым для реализации. Сценарий GetImage мог бы, например, проверить cookie, который вы установили в своем приложении, чтобы только люди, которые впервые посетили ваш сайт, могли получать изображения.

Теперь, если вы хотите, чтобы люди не отображали изображения, введя URL-адрес в браузере после, они посетили ваш сайт, это более сложно, и, на мой взгляд, для этого нет простого решения. Вы можете проверить HTTP-заголовок Referer, чтобы узнать, связан ли запрос с вашим сайтом (поскольку Referer будет пустым при размещении URL-адреса в строке URL-адреса, но будет содержать URL-адрес страницы, содержащей изображение, когда он включен в <img src=...>) , но это решение имеет недостаток, так как это предотвратит просмотр браузерами заголовка Referer (как правило, из соображений конфиденциальности, а не из очень широкой конфигурации, но это происходит) от просмотра ваших изображений вообще. Второй возможный недостаток заключается в том, что люди, вероятно, смогут увидеть изображения, которые уже кэшируются в вашем браузере, набрав их URL-адрес, если вы не можете настроить сервер для обслуживания их с некоторыми заголовками, запрещающими кеширование.

Смежные вопросы