Как реализовать безопасные для XML частные URL-адреса Amazon S3?

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

Пример URL-адреса будет выглядеть так:

/images/1849/21346_small.JPG?AWSAccessKeyId=05GMT0V3GWVNE7GGM1R2&Expires=1411603210&Signature=9MMO3zEXECtvB0w%2FuMEN8obt1ow%3D

Обратите внимание, что к тому времени, как вы это прочитаете, этот URL-адрес, возможно, уже истек. Ничего страшного, вопрос в формате.

Хотя указанный выше формат URL-адреса отлично работает на веб-сайте, он нарушает работу файлов XML. Причина в том, что символ & должен быть экранирован.

Например, я пытаюсь реализовать живые плитки Windows 8.1 для веб-сайта, на которые вы можете ссылаться на RSS-канал. Мой RSS-канал находится здесь:

http://www.jungledragon.com/all/rss/promoted

Этот канал будет работать в большинстве программ чтения RSS, однако конструктор плиток Windows 8 (http://www.buildmypinnedsite.com/en) особенно строги в отношении допустимости XML. Здесь вы можете увидеть ошибку, которую он выдает в указанном фиде:

http://notifications.buildmypinnedsite.com/?feed=http://www.jungledragon.com/all/rss/promoted&id=1

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

Мне интересно, нахожусь ли я в круговой проблеме, которую нельзя решить?


person Fer    schedule 01.09.2014    source источник


Ответы (1)


У меня было много подобных проблем с RSS-потоками. В XML-документах всегда следует использовать & (или эквивалент, например & или &). Если читатель не может правильно извлечь URL-адрес, то виноват читатель, а не вы. Но я могу вам сказать, что читатели-программисты с вами не согласятся.

Если вы программист, вы можете решить проблему, выполнив перенаправление, но это требует небольшой работы. Таким образом, вы должны получить URL-адрес из S3, сохранить его в своей базе данных и создать URL-адрес на своем веб-сайте, например http://www.jungledragon.com/images/123, и связать URL-адрес S3 со страницей изображений / 123. Теперь, когда кто-то переходит на страницу images / 123, вы получаете URL-адрес, который вы сохранили на своем сервере S3.

Фактически, если URL-адрес http://www.jungledragon.com/images/123 является ссылкой на ваше изображение, вы можете получить URL-адрес S3 в это время и выполнить перенаправление на лету!

person Alexis Wilke    schedule 29.11.2014