Что, если я просто сам использую скрипт-хак и буду строго общаться в JSON? Это безопасно? Если нет, то почему?
Допустим, у вас есть два сервера - frontend.com и backend.com. На frontend.com есть тег <script>
, подобный этому - <script src="http://backend.com/code.js"></script>
.
когда браузер оценивает code.js
, считается частью frontend.com
, а НЕ частью backend.com
. Таким образом, если код code.js содержит код XHR для связи с backend.com, не получится .
Будет ли безопаснее с HTTPS? Примеры сценариев приветствуются.
Если вы только что преобразовали <script src="https://backend.com/code.js>
в https, НЕ будет безопасным. Если остальная часть вашей страницы - http, то злоумышленник может легко обработать страницу посредником и изменить https на http - или, что еще хуже, включить свой собственный файл javascript.
Если вы преобразуете всю страницу и все ее компоненты в https, она будет более безопасной. Но если вы достаточно параноидальны, чтобы делать это, вы также должны быть параноиком, чтобы НЕ зависеть от внешнего сервера для ваших данных. Если злоумышленник скомпрометирует backend.com, он фактически получит достаточно рычагов на frontend.com, frontend2.com и на всех ваших сайтах.
Короче говоря, https полезен, но он не поможет вам ни на секунду, если ваш сервер будет взломан.
Итак, какие у меня варианты?
- Добавьте прокси-сервер в каждое из ваших клиентских приложений. Вам не нужно писать код, ваш веб-сервер может автоматически сделать это за вас. Если вы используете Apache, найдите mod_rewrite
- Если ваши пользователи используют самые последние браузеры, вы можете рассмотреть возможность использования Cross Origin Resource Sharing .
- Как указал The Rook, вы также можете использовать Flash + Crossdomain. Или вы можете использовать Silverlight и его эквивалент Crossdomain. Обе технологии позволяют вам общаться с javascript - поэтому вам просто нужно написать служебную функцию, и тогда будет работать обычный js-код. Я полагаю, что YUI уже предоставляет для этого флэш-упаковку - отметьте YUI3 IO
Что вы рекомендуете?
Я рекомендую создать прокси-сервер и использовать https на вашем веб-сайте.