如何监视JavaScript中特定Cookie的使用?

时间:2018-10-21 16:51:48

标签: node.js cookies jsdom

我正在编写一个脚本,目的是遵循JavaScript中任何特定cookie的用法。听起来这很奇怪,但这是上下文:我想研究客户端JavaScript是否实际使用了没有HTTPOnly标志的cookie。您可能知道,Cookie上的HTTPOnly标志使客户端JavaScript无法访问它,这有助于防止Cookie在XSS攻击中被窃取。我假设大多数不带有HTTPOnly标志的cookie不会在客户端JavaScript中使用,而仅不是HTTPOnly,因为这是默认设置。

我目前的计划是在Node.js中编写自己的脚本,该脚本将请求某个网页并使用jsdom包进行仿真。我计划使用Node.js的唯一原因是我不仅熟悉它,而且是JavaScript的本机,因此应该可以更轻松地仿真或解析该语言的JavaScript。接下来,我将在网页的开头添加自己的JavaScript代码,以尝试监视cookie的使用。所以基本上这里是模型:

请求网页内容(带有request模块)→在网页内容的开头添加html标记,其中将包含一些跟踪cookie使用的代码→使用jsdom模块模拟最终网站。

但是,由于JavaScript与cookie交互的方式使跟踪特定的cookie变得困难,所以我不确定如何做到这一点。我目前所拥有的是一种为document.cookie创建自定义获取器和设置器的方法,每当访问document.cookie或将其设置为某种东西时,该方法即可登录到控制台。这是代码:

<script>
var originalCookieGetter = document.__lookupGetter__('cookie').bind(document);
var originalCookieSetter = document.__lookupGetter__('cookie').bind(document);

Object.defineProperty(document, 'cookie', {
    get: function () {
        console.log('GET COOKIES');
        return originalCookieGetter();
    },
    set: function (val) {
        console.log('SET COOKIES: ' + val);
        originalCookieSetter(val);
    }
});

</script>

但是,这仍然很难跟踪正在使用的cookie,因为document.cookie返回cookie整个列表的字符串,然后用户必须使用String.split()或其他函数对其进行操作。此外,用户可以设置一个与document.cookie输出相同的变量,这将导致我失去跟踪使用情况的能力。实际上,这种方法可能根本不起作用。我可能不得不考虑比这低得多的级别,例如分析内存。

最后,我还认为不必模仿代码。我当然可以将所有脚本的列表编译为字符串,然后尝试在字符串中搜索某些模式。例如,如果一个网站有一个名为“ user_session_id”的cookie,我可以在代码中搜索该字符串。的后备之处是:

1)在不引用cookie的情况下(例如某些其他变量的名称)可以使用此字符串。
2)该字符串可以存储在变量中,那么当使用该变量时,我将无法分辨
3)您不需要cookie的名称即可通过document.cookie

来获取其值。

到目前为止,我真的认为如果没有某种较低级别的检查,这是不可能的。即使那样,我也不知道我会如何处理。这个研究想法难道不是我应该讨价还价的吗?

此外,此代码不一定必须处理所有边缘情况。我计划仅在Amazon Alexa网络排名的前100个网站上使用这种方法,或者更多或更少。

0 个答案:

没有答案