$ .post () как букмарклет XSS - PullRequest
       5

$ .post () как букмарклет XSS

0 голосов
/ 01 сентября 2010

Просто любопытно, может кто-нибудь объяснить мне, почему я могу запросить страницу из букмарклета, подобного этому:

javascript:var%20s=document.createElement('script');var data=encodeURI(location.href)+encodeURI('\n\n')+(encodeURI(document.getElementsByTagName('body')[0].innerHTML));s.setAttribute('src','http://example.com/remote.php?id=68&act=new&data='+data);document.getElementsByTagName('body')[0].appendChild(s);void(s);

, который выходит и запрашивает страницу и может даже предоставитьGET-переменная ввода.

Однако я не могу сделать пост / получить XHR с ajax через что-то вроде jQuery из-за той же политики происхождения ... Почему?Это проблема браузера или часть стандартов?

примечание: я изменил букмарклет .Примечание 2: Мой вопрос: почему это не нарушение политики?

Ответы [ 4 ]

3 голосов
/ 01 сентября 2010

Разница в том, что вы не можете (напрямую) прочитать ответ, который становится элементом <script>.

Если URL-адрес возвращает Javascript, который определяет полезные функции, вы можете использовать его.
Если он содержит что-либо еще (например, данные JSON или XML), вы не можете прочитать ответ.

Аналогично, вы можете создать элемент <img>, который указывает на изображение в другом домене.

1 голос
/ 01 сентября 2010

Одинаковая политика происхождения для javascript не позволяет страницам из разных доменов обмениваться данными, получать доступ к объектам друг друга, для чтения или записи, а также не позволяет xmlhttprequests (вызовы ajax) запрашивать данные с других серверов.

Но, однако, это не имеет никакого отношения к разрешению скриптов, на которые ссылаются другие серверы. Как сказал @SLaks, вы можете добавить тег <script> с другого сервера, как вы можете добавить тег <img> с другого сервера.

1 голос
/ 01 сентября 2010

Этот букмарклет не нарушает политику с тем же происхождением . Эта политика ограничена только запросами XHTTP, и этот букмарклет добавляет на страницу элемент script.

Элементы DOM (такие как изображения и скрипты) могут свободно загружать ресурсы из любой точки Интернета.

Хотя любой сценарий может эффективно выполнять междоменный запрос GET путем создания сценариев или запросов img через DOM, он не сможет извлечь какие-либо данные из этого ресурса, если возвращенный ответ не сформирован надлежащим образом. Правильно сформированный ответ фактически является основой для междоменного ajax .

0 голосов
/ 01 сентября 2010

Этот букмарклет не выполняет xhr-запрос чего-либо с другого сервера, но добавляет сценарий с этого другого сервера, что является приемлемым и не противоречит политике с тем же источником .

* 1004.* На самом деле это известный обходной путь для такого рода межсерверных коммуникаций, взгляните на jsonp .
...