Каковы риски безопасности при использовании междоменного XMLHttpRequest? - PullRequest
5 голосов
/ 29 сентября 2011

Во многих местах, которые я видел, люди говорили о междоменном XMLHttpRequest, что невозможно из-за некоторых соображений безопасности .Тем не менее, я не нашел сообщение, указывающее, что это на самом деле причины безопасности ?

Люди упоминали, что JSONP является одной из хороших альтернатив.Другой альтернативой может быть использование заголовков Origin и Access-Control-Allow-Origin.

Однако я просто хочу знать, какие проблемы безопасности могут возникнуть из-за использования междоменного XMLHttpRequest?

Ответы [ 3 ]

9 голосов
/ 30 сентября 2011

Я думаю, что было бы лучше ответить на ваш вопрос, например, ПОЧЕМУ это было бы ужасно плохо.

Вы заходите на мой сайт (example.org). Я загружаю скрипт, который делает клиентский AJAX-запрос на facebook.com/messages/from/yourgirlfriend. Вы вошли в Facebook, и ваш браузер сообщает Facebook, что мой запрос на самом деле вы. Facebook с радостью передает мою просьбу о странных сексуальных вещах, которые вы хотите попробовать. Теперь я знаю о вас то, что вы, вероятно, не хотели, чтобы я знал.

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

Тебе сейчас не безопаснее?

2 голосов
/ 30 сентября 2011

Без этих «соображений безопасности» весь Интернет, как вы знаете, не мог бы существовать.На самом деле, я пойду и скажу, что нет правила, более важного для безопасности Интернета, чем политика того же происхождения .

Ни одна веб-страница не может иметь аутентификацию без этих правил, Google, учетные записи веб-почты, ТАК, ничего из этого не может существовать.Это было бы, как если бы у вас был XSS на каждом домене.Вы можете выполнить XHR против gmail.com и прочитать чью-либо электронную почту.Токены CSRF не будут работать, потому что вы можете прочитать любую страницу и подделать запрос.

Единой политики одного и того же происхождения не существует, но правила четко изложены в Руководстве по безопасности браузера Google .Это очень логично, и правила для различных платформ очень похожи, потому что именно так Интернет должен работать .

Выполнив Access-Control-Allow-Origin: *, вы утрачиваете свои права, предоставленные вам веб-браузерами для этой страницы.Это имеет основные последствия для безопасности.Вы не сможете защитить себя от CSRF с помощью токенов.Capthca может смягчить эту проблему, также может помочь проверка реферера (она будет пустой, если источником является HTTPS).Вам следует прочитать Шпаргалку по профилактике CSRF .

1 голос
/ 29 сентября 2011

Если это было разрешено, злоумышленник, которому удается внедрить Javascript на вашу страницу (с помощью эксплойта / социальной инженерии), может отправлять данные (обычно конфиденциальные), полученные от ваших клиентов, без их ведома (поскольку запросы XMLHttpRequests не требуют от пользователядействия происходят и они молчат).Это мера безопасности браузера.

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

РЕДАКТИРОВАТЬ: Примеры угроз безопасности: вы входите в свою учетную запись электронной почты через Интернет (например, Gmail или Yahoo).Вы продолжаете просмотр (в другой вкладке или даже в текущей вкладке) на другой вредоносный сайт.Этот вредоносный сайт пытается сделать XHR для того же сайта вашей учетной записи электронной почты.Поскольку XHR зависит от вас, и поскольку это запрос на стороне клиента / браузера, этот запрос будет иметь тот же сеанс, который вы использовали для входа в систему, и, следовательно, этот веб-сайт может делать с вашей учетной записью все, что угодно (отправлять спам-почту черезваша учетная запись, загрузить ваши контакты, ... и т. д.).Другой пример: на форуме кому-то удается внедрить Javascript с XHR на другой сайт.Теперь он может украсть список контактов (и, возможно, затем удалить их) у всех людей, которые посещают его пост на форуме (используя тот же сеанс вашей электронной почты в сети).Не говоря уже о том, что он может поделиться сессией участников форума, посетивших его пост, чтобы получить любые данные, которые они имеют на форуме (личные сообщения / friends..etc).Затем он может отправить эти данные на свой сервер, чтобы сохранить их.

...