Может ли jQuery.getJSON поместить файлы cookie домена в заголовок запроса, который он делает? - PullRequest
3 голосов
/ 24 ноября 2010

(Примечание: см. Также связанный вопрос Могут ли браузеры реагировать на Set-Cookie, указанный в заголовках в запросе XSS jquery.getJSON ()? )

Я не могу установить cookie (имя которого mwLastWriteTime ) в заголовке запроса операции JSON.Сам запрос является простым из учебников по Freebase MQL, и в противном случае он работает нормально:

// Invoke mqlread and call the function below when it is done.
// Adding callback=? to the URL makes jQuery do JSONP instead of XHR.
jQuery.getJSON("http://api.sandbox-freebase.com/api/service/mqlread?callback=?",
{query: JSON.stringify(envelope)},   // URL parameters
displayResults);                     // Callback function

Я надеялся, что смогу установить этот файл cookie с чем-то вроде:

$.cookie('mwLastWriteTime', value, {domain: ".sandbox-freebase.com"});

К сожалению, глядя в FireBug на заголовок исходящего запроса, я вижу только:

Host    api.sandbox-freebase.com
User-Agent  [...]
Accept  */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive  115
Connection  keep-alive
Referer [...]

Но если я не укажу домен (или если я явно укажу домен запрашивающего сайта)Я могу заставить mwLastWriteTime отображаться в заголовках для локальных запросов.Поскольку домен .sandbox-freebase.com владеет этими файлами cookie, разве они не должны путешествовать вместе с GET?Или нужен какой-то обходной путь?

Мой код весь JavaScript, и я хотел бы установить этот cookie, а затем сразу же вызвать getJSON.

Ответы [ 2 ]

5 голосов
/ 24 ноября 2010

Вы не можете установить междоменный cookie , потому что это откроет браузер (и, следовательно, пользователя) для атак XSS.

Цитировать из QuirksMode.orgстатья , на которую я ссылаюсь выше:

Обратите внимание, что целью домена является разрешение cookie-файлам проходить через субдомены.Мой cookie не будет прочитан search.quirksmode.org, так как его домен www.quirksmode.org.Когда я устанавливаю домен quirksmode.org, поисковый поддомен также может прочитать cookie.Я не могу установить домен cookie для домена, в котором я не являюсь, я не могу создать домен www.microsoft.com.В этом случае разрешен только quirksmode.org.

Если вы хотите сделать межсайтовый запрос со значениями cookie, вам потребуется настроить специальный прокси на сервере, которым вы управляете, что позволит вампередать значения для отправки в виде значений cookie (возможно, через параметры POST).Вы также захотите убедиться, что вы должным образом обезопасили его, чтобы ваш прокси-сервер не стал средством, с помощью которого чья-либо личная информация была «освобождена».

0 голосов
/ 24 ноября 2010

Запускаете ли вы все свои тесты через localhost?Вы используете IE?Если это так, то он будет применять свои особые требования безопасности и, скорее всего, сбросит ваши куки.Откройте fiddler и используйте http://ipv4.fiddler, чтобы обойти это.

Если этот тип обмана не используется (как вы видите, вы используете FireFox), это также может быть случай, когда вам нужноявно задайте домен cookie, чтобы он совпадал с доменом вашего запроса JSON.Браузер не будет отправлять файлы cookie, установленные для домена A, на запрос к домену B. Однако я не уверен на 100%, что это так.

...