Получить хост из куки

Я создаю и расширяю с помощью Firefox Addon SDK (v1.9).

Мое приложение должно удалять файлы cookie по мере их добавления (или изменения) на основе базы данных совпадающих URI.

Я выполняю эту задачу, добавляя наблюдатель к 'cookie-changed' и реализуя nsICookie для определения совпадающих файлов cookie и nsICookieManager для удаления файла cookie при совпадении находится.

Проблема

Мне нужно знать, с какого веб-сайта (URL) был добавлен/изменен каждый файл cookie.


person josesigna    schedule 06.09.2012    source источник


Ответы (1)


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

Что вы можете сделать, так это зарегистрировать наблюдателя для уведомления http-on-examine-response. Вы можете посмотреть Set-Cookie заголовок канала, а также URL-адрес канала, поэтому, когда уведомление cookie-changed будет отправлено позже, вы будете знать, какой веб-сайт несет ответственность. Что-то вроде этого:

var observer = require("observer-service");
observer.add("http-on-examine-response", function(subject, data)
{
  subject.QueryInterface(Ci.nsIHttpChannel);
  var cookieNames = [];

  // There can be more than one Set-Cookie header, cannot use getResponseHeader
  subject.visitResponseHeaders(function(header, value)
  {
    if (header.toLowerCase() == "set-cookie")
    {
      var match = /^([^\s=]+)=/.exec(value);
      if (match)
        cookieNames.push(match[1]);
    }
  });

  if (cookieNames.length)
  {
    var url = channel.URI.spec;

    // Remember that this url set the cookies or just clear the header
    if (!isAllowedToSetCookies(url, cookieNames))
      channel.setResponseHeader("Set-Cookie", "", false);
  }
});

Примечание. Этот код не тестировался.

Документация: уведомления наблюдателя, nsIHttpChannel

person Wladimir Palant    schedule 07.09.2012
comment
Я использую ваш код для изменения политики безопасности контента. После того, как я позвонил setResponseHeader, я вижу в инструментах разработки старое значение заголовка. Есть ли способ убедиться, что он работает? - person nilfalse; 12.02.2015
comment
@nilfalse: инструменты разработки также используют уведомление http-on-examine-response для проверки данных — если они получат свою очередь раньше, чем ваше расширение, они покажут исходное значение. Таким образом, единственный надежный способ узнать, что все работает, — это посмотреть, вызывает ли изменение заголовка какие-либо изменения в поведении браузера. Имейте в виду, я не уверен, как CSP реализован внутри — вполне возможно, что он использует уведомление http-on-examine-response, что будет означать, что вы слишком поздно изменяете заголовок. - person Wladimir Palant; 12.02.2015