Firefox 隐藏的 cookies 不在 cookies.sql 中?

Firefox 隐藏的 cookies 不在 cookies.sql 中?

当我访问 nadex.com 报价时,Firebug 告诉我我发送了这些 cookie(但实际上只有一行):

JSESSIONID=Qk3lNyhpQCpGpfx4bghpJLd2ML90tNx3lKvpvPLcvdmJyGRGztH5!1308128606!-757\
827124; bhCookieSess=1; bhCookiePerm=1; IGFOREXCOOKIE=; LS__LSEngine_S=exist_13\
02897154477; LS__LSEngine_K=SHARE_SESSION; LS__https://demo-mdp.nadex.com=1; LS\
__LSEngine=73; iconStateSetting=/dealing/pd/cfd/login/loginUser.htm?iconsEnable\
d=true; homeUrl=https://demo.nadex.com/content/sites/ndx/en_US/; showDmaHelp=fa\
lse 

并且 Firefox 的“编辑/首选项/隐私/删除单个 cookie”似乎同意。

但是,当我查看 cookies.sql 时,上面的一些 cookie 没有显示:

cp ~/.mozilla/firefox/xxxxxxxx.default/cookies.sqlite /tmp && \
echo "SELECT name FROM moz_cookies;" | sqlite3 /tmp/cookies.sqlite |\
sort | uniq 

(请注意,我必须“cp”,因为原始数据库已被 Firefox 锁定)。

结果很丑陋且毫无帮助,但我特别指出,这些值并没有出现,尽管我期望它们会出现:

  • JSESSIONID(可能是最重要的一个)
  • 主页网址
  • 显示Dma帮助
  • 可能还有其他

我如何找到这些“隐藏”的 cookie?我正在编写一个 perl/curl 脚本来下载数据,但如果没有 JSESSIONID cookie,它就无法工作(而且从 Firebug 手动复制不够自动化,而且 JSESSIONID 经常更改)

编辑(评论太长/太难处理):@Lekensteyn 感谢 GM 脚本!当我访问 nadex.com 并登录时,它不会更新 webappsstore.sqlite,但它会更新 sessionstore.js,其中包含:

{"host":"www.nadex.com","value":"3x0LNpvGDHQq\
xls7FxbqtJ2pFlL0gSyk9YvBkPs09r4yvQyZDMWs!-1593496027!1301994507","path":"/price\
stream","name":"JSESSIONID"}

所有内容都在一行上(事实上,整个文件只有一行)。

但是,我还没有检查这是否与 GM 脚本有关,或者无论如何都会发生。至少,它给了我一个新的挖掘点。

答案1

我怀疑 Firefox 出于数据完整性和性能原因不会直接更新 cookies.sqlite 文件。相反,它将数据临时存储在 cookies.sqlite-journal(Firefox 3.x)中。由于会话 cookie 经常更改,因此 cookie 不存在于 cookies.sqlite 文件中是合理的。关闭 Firefox 时,将应用对 cookies.sqlite 的更改。


可以使用 Greasemonkey 脚本来解决。

  1. 安装Greasemonkey 插件
  2. 重启Firefox。同时,将下面的文本保存为“jsessionid.user.js”。

    // ==UserScript==
    // @name           JSESSIONID to localStorage
    // @namespace      [email protected]
    // @description    Saves the JSESSIONID cookie in localStorage
    // @include        https://demo.nadex.com/dealing/pd/cfd/security*
    // ==/UserScript==
    (function() {
        var sessid = document.cookie.match(/JSESSIONID=([^;]+)/);
        if (sessid) {
            var oldSID = localStorage.JSESSIONID;
            if (sessid != oldSID) localStorage.JSESSIONID = sessid[1];
        }
    })();
    

    如果会话 ID 与之前保存的会话 ID 不同,则此操作应在登录后立即检索会话 cookie,并使用 HTML5 存储进行存储。如果您需要让脚本更早地保存会话 ID,则需要将该@include行修改为类似 的内容https://demo.nadex.com/*。我注意到没有会话 ID 通过 HTTP 发送,只有 HTTPS。

  3. 在 Firefox 中打开jsessionid.user.js文件(或将其放入 Firefox)。系统将提示您安装它。接受它。
  4. 在 Bash 中,使用类似:

    sessid=$(sqlite3 ~/.mozilla/firefox/xxx.xxx/webappsstore.sqlite "SELECT \
     value FROM webappsstore2 WHERE key='JSESSIONID' AND secure='1' \
     AND host LIKE 'moc.xedan.%' LIMIT 1;")
    

    moc.xedan.是域的一部分,以相反的顺序排列。

为了调试,您可以使用下一个书签:

javascript:alert("JSESSIONID=" + localStorage.JSESSIONID);

null如果未找到此类 ID,则会显示。请注意,在https://demo.nadex.com或上执行此操作很重要http://demo.nadex.com。此书签小程序可直接粘贴在位置栏中。

答案2

您可以在个人资料中的 sessionstore.js 中找到您的会话 ID。grep 查找:

{"host":"<your site>","value":"(.+)","path":"/","name":"JSESSIONID","httponly":true}

使用如 FF cookie 管理窗口中所示的适当值。

这可能仅在您在属性中激活了会话恢复机制后才有效。

相关内容