Скажите, что существует сайт foo.com
который загружает JavaScript из сайта bar.com
. Теперь, скажите JavaScript от сайта bar.com
попытки считать использование cookie document.cookies
. У меня создалось впечатление, что использование JavaScript, можно считать все настройки куки в браузере независимо от их источника. Но оказывается что JavaScript от сайта bar.com
может только получить доступ к настройкам куки bar.com
и не любой другой. Если это верно, как нападения инжекции сценария, которые крадут выполненные cookie?
Но оказывается, что JavaScript с сайта bar.com может получить доступ к cookies, установленным только bar.com, а не любым другим.
Это не так. Важно то, где находится HTML-документ, содержащий элемент , а не URL JS-файла, который
упоминает в атрибуте src.
Я подозреваю, что ваша проблема в том, что вы обращаетесь к document.cookies
, когда свойство называется document.cookie
(Singular!)
Они загружают скрипты внутри атакованной страницы.
Например, когда комментарии в системе блога скомпрометированы, они содержат элемент script
, который выполняется при отображении страницы. Этот скрипт может получить файлы cookie и отправить их на сервер злоумышленника.
Вот почему вы не должны никогда доверять вводу пользователя и запрещать хотя бы определенные теги в комментариях (или переводить каждые <
в <
). Но не делайте этого на стороне клиента, так как этот метод предотвращения легко обойти; проверить (и изменить) вредоносный ввод на стороне сервера.
Вы можете получить доступ только к файлам cookie, которые были установлены для данного доменного имени. Из статьи Википедии о файлах cookie :
Помимо пары имя / значение, файл cookie может также содержать дату истечения срока годности, путь, доменное имя и cookie предназначен только для зашифрованных соединения. RFC 2965 требует использования файлов cookie есть номер версии, но это обычно опускается. Эти фрагменты данных следовать за парой name = newvalue и разделенные точкой с запятой. Например, cookie может быть создан сервером отправив строку Set-Cookie: имя = новое значение; истекает = дата; путь = /; домен = .example.org.
Домен и путь сообщает браузеру, что файл cookie должен быть отправлен обратно на сервер, когда запрос URL-адресов данного домена и дорожка. Если не указано, они по умолчанию к домену и пути объекта это было запрошено. В результате строки домена и пути могут указывать браузер для отправки файла cookie, когда он обычно нет. Для безопасности причины, cookie принимается только если сервер является членом домен, указанный в строке домена.
Если foo.com
отправил файл cookie с доменным именем bar.com
или даже .com
, то код JavaSCript на bar.com
может прочитать этот файл cookie. Однако большинство браузеров настроены на прием файлов cookie только при совпадении доменного имени и будут отклонять такие файлы cookie.