безопасные изображения (Gmail) - PullRequest
0 голосов
/ 15 февраля 2011

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

Даже если вам необходимо войти в систему, чтобы просматривать изображения надлежащим образом ... ничто не мешает пользователю просматривать изображения, набрав <website-director>/image-folder/11232.jpg или что-то еще.

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

Gmail делает очень интересную вещь, их теги изображений выглядят так:

<img src=/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5>

Я думал, что атрибут src должен содержать ссылку на изображение ?? ... как gmail обходит это?

Это больше для образовательных целей на данный момент, так как я думаю, что эта схема Gmail может быть излишней для нашей реализации.

Спасибо за ваш отзыв заранее, Andrew

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Я думал, что атрибут src должен содержать ссылку на изображение?

GMail ссылается на изображение. Он просто извлекается динамически, возможно, на основе этой строки th=12d7d49120a940e5.

Попробуйте перейти к http://mail.google.com/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5

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

1 голос
/ 15 февраля 2011

Помимо динамической обработки изображения из вашего веб-приложения, также можно использовать веб-приложение для динамического авторизации доступа к статическим ресурсам, которые будет обслуживать веб-сервер - обычно путем помещения файлов в то место, где есть веб-сервер. доступ, но не сопоставленный с любым общедоступным URI, а затем использование чего-то вроде X-Sendfile (lighttpd, Apache с mod_sendfile, др.), X-Accel-Redirect (nginx), X-Reproxy-File (Perlbal) и т. д. и т. д. Или с помощью FastCGI вы можете настроить приложение в роли «авторизатора» FastCGI, а не в качестве поставщика контента.

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

0 голосов
/ 15 февраля 2011

Код, который запускается после выполнения этого запроса GET:

/mail/?attid=0.1&disp=emb&view=att&th=12d7d49120a940e5

выводит изображение в браузер.Что-то не обязательно должно иметь имя с .jpg или .png или любым другим концом, чтобы браузер считал его изображением.Вот как алгоритмы капчи могут обслуживать разные изображения в зависимости от значения в id.Например, эта ссылка:

http://www.google.com/recaptcha/api/image?c=03AHJ_VusfT0XgPXYUae-4RQX2qJ98iyf_N-LjX3sAwm2tv1cxWGe8pkNqGghQKBbRjM9wQpI1lFM-gJnK0Q8G3Nirwkec-nY8Jqtl9rwEvVZ2EoPlwZrmjkHT7SM32cCE8PLYXWMpEOZr5Uo6cIXz1mWFsz5Qad1iwA

Служит для отображения этого изображения:

enter image description here

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

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