Как да внедрим безопасни за XML частни URL адреси на Amazon S3?

На моя уебсайт за фотография съхранявам снимки на Amazon S3. За да ги покажа на уебсайта, използвам подписани URL адреси. Това означава, че URL адресите на изображения изтичат. Само самото уеб приложение може да генерира валидни URL адреси на файлове с изображения.

Примерен URL ще изглежда така:

http://media.jungledragon.com/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 с вашата страница images/123. Сега, когато някой отиде на страница images/123, вие извличате URL адреса, който сте запазили от вашия S3 сървър.

Всъщност, ако URL http://www.jungledragon.com/images/123 е препратка към вашето изображение, можете да получите S3 URL по това време и да извършите пренасочването в движение!

person Alexis Wilke    schedule 29.11.2014