Чтение Cookie с помощью букмарклета

Я разрабатываю букмарклет, который помогает пользователям обмениваться изображениями. При аутентификации человека мне нужно прочитать файл cookie, установленный доменом: www.xxx.com.

JavaScript букмарклета обслуживается bookmarklet.xxx.com, но, поскольку этот JavaScript отображается на веб-сайте, на котором вызывается букмарклет, он обращается только к файлам cookie этого сайта, а не к файлам, установленным www.xxx.com.

Я исследовал это, и, согласно некоторым ответам в SO, это проблема безопасности, и, следовательно, файлы cookie из другого домена недоступны.

Я попытался выполнить свои скрипты в скрытом iframe, отображаемом www.xxx.com/iframe/iframe.html, и он получил доступ к файлам cookie, но проблема в том, что этот скрипт не может t передать значение моему скрипту букмарклета. И я не могу получить доступ к Iframe DOM, что является еще одной проблемой безопасности.

Пожалуйста, предложите подходящий способ, чтобы я мог решить эту проблему.


person Talha Masood    schedule 06.02.2014    source источник


Ответы (1)


Вы можете использовать postMessage для передачи информации из iframe обратно на вашу страницу.

Отправка сообщения:

windowReference.postMessage("The user is 'bob' and the password is 'secret'",
              "https://secure.example.net");

Чтение сообщения

window.addEventListener("message", receiveMessage, false);

function receiveMessage(event)
{
  if (event.origin !== "http://example.org:8080")
    return;

  // ...
}
person epascarello    schedule 06.02.2014
comment
Конечно, позвольте мне попробовать. И я действительно отправлю тебе цветы, если получится @epascarello ;) - person Talha Masood; 06.02.2014
comment
Это хорошая вещь, но я думаю, что у нее есть серьезные проблемы с совместимостью с другими браузерами! - person Talha Masood; 06.02.2014
comment
Только один последний вопрос. Возможно ли, если бы я смог получить доступ к уникальному хэшу браузера или уникальному отпечатку пальца. Видите ли, моя цель — распознать компьютер. Если не через куки, то есть ли другой способ? - person Talha Masood; 06.02.2014
comment
Существует множество библиотек: github.com/Valve/fingerprintjs — одна из них. - person epascarello; 06.02.2014