JavaScript实现浏览器Cookie拦截与修改的操作方法

 更新时间:2025年04月29日 11:32:45   作者:星哲最开心  
在浏览器中拦截和修改 Cookie 的设置或修改位置,通常可以通过以下方法实现,具体场景取决于你是想在前端 JavaScript 中操作,还是在底层网络请求中拦截,本文小编给大家介绍了浏览器Cookie拦截与修改方法,需要的朋友可以参考下

一、前端 JavaScript 层拦截(修改 document.cookie)

浏览器通过 document.cookie API 读写 Cookie,可通过重写其 getter 和 setter 实现拦截:

// 保存原始的 cookie 操作
const originalCookie = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie').get;

// 重写 cookie 的 setter 和 getter
Object.defineProperty(document, 'cookie', {
  get() {
    const value = originalCookie.call(document);
    console.log('读取 Cookie:', value);
    return value;
  },
  set(newValue) {
    console.log('修改 Cookie:', newValue);
    // 在此处拦截或修改 Cookie 值
    // 例如:阻止特定 Cookie 写入
    if (newValue.includes('block_this_cookie')) {
      return;
    }
    originalCookie.call(document, newValue);
    return true;
  },
});

二、拦截网络请求中的 Cookie(如 Set-Cookie 头)

若需拦截 HTTP 请求/响应中的 Cookie(如 Set-Cookie 头),可 Hook 网络请求:

1. 拦截 XMLHttpRequest 和 fetch

// 拦截 XMLHttpRequest
const originalXHROpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function (method, url) {
  this.addEventListener('readystatechange', function () {
    if (this.readyState === 4) {
      const cookies = this.getResponseHeader('Set-Cookie');
      if (cookies) {
        console.log('拦截到 Set-Cookie:', cookies);
      }
    }
  });
  originalXHROpen.apply(this, arguments);
};

// 拦截 fetch
const originalFetch = window.fetch;
window.fetch = async function (...args) {
  const response = await originalFetch.apply(this, args);
  const cookies = response.headers.get('Set-Cookie');
  if (cookies) {
    console.log('拦截到 Set-Cookie:', cookies);
  }
  return response;
};

2. 使用 Service Worker(更底层拦截)

通过 Service Worker 拦截所有网络请求:

// 注册 Service Worker
navigator.serviceWorker.register('sw.js').then(() => {
  console.log('Service Worker 注册成功');
});

// sw.js 文件内容
self.addEventListener('fetch', (event) => {
  event.respondWith(
    (async () => {
      const response = await fetch(event.request);
      const cookies = response.headers.get('Set-Cookie');
      if (cookies) {
        console.log('拦截到 Set-Cookie:', cookies);
        // 修改后返回新响应
        const newHeaders = new Headers(response.headers);
        newHeaders.set('Set-Cookie', 'modified_cookie=value');
        return new Response(response.body, { headers: newHeaders });
      }
      return response;
    })()
  );
});

三、浏览器扩展(Chrome Extension)

通过浏览器扩展的 webRequest API 修改请求头:

// manifest.json 中声明权限
{
  "permissions": ["webRequest", "webRequestBlocking", "http://*/*", "https://*/*"]
}

// background.js 中监听请求
chrome.webRequest.onHeadersReceived.addListener(
  (details) => {
    const headers = details.responseHeaders;
    for (const header of headers) {
      if (header.name.toLowerCase() === 'set-cookie') {
        header.value = header.value.replace('original=', 'modified=');
      }
    }
    return { responseHeaders: headers };
  },
  { urls: ["<all_urls>"] },
  ["blocking", "responseHeaders"]
);

四、代理工具拦截(如 Charles/Fiddler)

使用代理工具直接修改请求/响应中的 Cookie:

  • 启动代理工具(如 Charles),设置 SSL 代理。
  • 在工具中找到目标请求,修改 Cookie 请求头或 Set-Cookie 响应头。

注意事项

  • 跨域限制:前端 Hook 受同源策略限制,无法直接访问跨域请求的 Cookie。
  • 安全性:修改 Cookie 可能导致隐私泄露或会话劫持,需遵守法律法规。
  • 兼容性Object.defineProperty 对某些特殊 Cookie 可能失效,可改用 Proxy 增强拦截。

根据具体需求选择合适的方法。如果是用于调试或分析,推荐使用浏览器开发者工具的 Network 面板直接查看 Cookie 变化。

以上就是JavaScript实现浏览器Cookie拦截与修改的操作方法的详细内容,更多关于JavaScript浏览器Cookie拦截与修改的资料请关注脚本之家其它相关文章!

相关文章

  • js调试系列 断点与动态调试[基础篇]

    js调试系列 断点与动态调试[基础篇]

    上几篇文章已经为大家介绍了js调试系列的一些基础知识,支持乱码兄弟为大家带来了js断点与动态调试方法,需要的朋友可以参考下
    2014-06-06
  • 基于pdf.js实现文本划词高亮效果

    基于pdf.js实现文本划词高亮效果

    最近有一个需求,需要对于pdf文本进行操作,对接ai大模型对pdf文档进行高效解读,其中一个功能就是对于pdf的文本进行划词高亮,用户可进行阅读标记,本文给大家介绍了如何基于pdf.js实现文本划词高亮效果,需要的朋友可以参考下
    2024-05-05
  • javascript实现跨域的方法汇总

    javascript实现跨域的方法汇总

    这篇文章主要给大家汇总介绍了javascript实现跨域的方法的相关资料,需要的朋友可以参考下
    2015-06-06
  • JS与jQ读取xml文件的方法

    JS与jQ读取xml文件的方法

    本文通过代码实例给大家讲解js读取xml文件及jq读取xml文件的方法,对本文感兴趣的朋友一起学习吧
    2015-12-12
  • select标签设置默认选中的选项方法

    select标签设置默认选中的选项方法

    下面小编就为大家分享一篇select标签设置默认选中的选项方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • JavaScript如何生成二维数组

    JavaScript如何生成二维数组

    这篇文章主要介绍了JavaScript如何生成二维数组问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • JavaScript如何实现跨域请求

    JavaScript如何实现跨域请求

    这篇文章主要为大家详细介绍了JavaScript如何实现跨域请求,告诉大家什么是跨域请求?什么时候会用到跨域请求?感兴趣的小伙伴们可以参考一下
    2016-08-08
  • 深入了解JavaScript中的函数式编程

    深入了解JavaScript中的函数式编程

    JavaScript是一门多范式的编程语言,其中函数式编程成为了一种受欢迎的范式之一,本文将带您深入了解JavaScript函数式编程的核心概念和技术,需要的可以参考一下
    2023-06-06
  • js中数组排序sort方法的原理分析

    js中数组排序sort方法的原理分析

    这篇文章主要介绍了js中数组排序sort方法的原理,以实例形式分析了sort排序方法的运行机制,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • JS获取IMG图片高宽的简单实例

    JS获取IMG图片高宽的简单实例

    下面小编就为大家带来一篇JS获取IMG图片高宽的简单实例。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05

最新评论