asp.net защищает изображения от статических запросов от других пользователей? - PullRequest
3 голосов
/ 25 февраля 2009

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

http://myapp/images/someuid/image1.jpg

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

  • как мы можем защитить это - своего рода обработчик http?

  • существует ли способ обслуживания образа для использования преимуществ кэширования без необходимости записи его в файловую систему и предоставления IIS грязной работы?

Ответы [ 3 ]

5 голосов
/ 25 февраля 2009

Используйте .ashx: -

TimeSpan maxAge = new TimeSpan(0, 15, 0); //!5 minute lifetiem.

context.Response.ContentType = "image/gif";
context.Response.Cache.SetCacheability(HttpCacheability.Private);
context.Response.Cache.SetExpires(DateTime.UtcNow.Add(maxAge));
context.Response.Cache.SetMaxAge(maxAge);
context.Response.Cache.SetLastModified(lastModified); // last modified date time of file
context.Response.WriteFile(filenameofGif);

Вы можете включить любые проверки кода, необходимые для обеспечения доступа к изображению нужных пользователей

1 голос
/ 25 февраля 2009

Если изображения должны быть частными для определенного пользователя, вам следует либо сохранить их вне основной папки приложения, либо поместить файл web.config в каждую из этих папок с изображениями (например, someuid ) и ограничить доступ в файле конфигурации - либо отключение всех (deny = "*"), либо разрешение доступа только для конкретного пользователя (allow = "john").

В обоих случаях вы можете использовать обработчик для потоковой передачи изображения пользователю, но, по крайней мере, вы можете проверить разрешения сейчас. Если запрашивающий пользователь не имеет прав доступа, бросьте ему 401 или даже отобразите другое изображение, например imagenotfound.gif.

Тем не менее, я боюсь, что обработчик будет генерировать много трафика, так как будет один вызов на изображение, я не знаю, сколько изображений вы отображаете на пользователя.

1 голос
/ 25 февраля 2009

Я думаю, что лучшим вариантом было бы запретить прямой доступ к изображениям из Интернета и создать aspx, который будет проверять права пользователей и возвращать правильное изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...