欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript實現(xiàn)瀏覽器Cookie攔截與修改的操作方法

 更新時間:2025年04月29日 11:32:45   作者:星哲最開心  
在瀏覽器中攔截和修改 Cookie 的設(shè)置或修改位置,通常可以通過以下方法實現(xiàn),具體場景取決于你是想在前端 JavaScript 中操作,還是在底層網(wǎng)絡(luò)請求中攔截,本文小編給大家介紹了瀏覽器Cookie攔截與修改方法,需要的朋友可以參考下

一、前端 JavaScript 層攔截(修改 document.cookie)

瀏覽器通過 document.cookie API 讀寫 Cookie,可通過重寫其 getter 和 setter 實現(xiàn)攔截:

// 保存原始的 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;
  },
});

二、攔截網(wǎng)絡(luò)請求中的 Cookie(如 Set-Cookie 頭)

若需攔截 HTTP 請求/響應(yīng)中的 Cookie(如 Set-Cookie 頭),可 Hook 網(wǎng)絡(luò)請求:

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 攔截所有網(wǎng)絡(luò)請求:

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

// sw.js 文件內(nèi)容
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);
        // 修改后返回新響應(yīng)
        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 中聲明權(quán)限
{
  "permissions": ["webRequest", "webRequestBlocking", "http://*/*", "https://*/*"]
}

// background.js 中監(jiān)聽請求
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)

使用代理工具直接修改請求/響應(yīng)中的 Cookie:

  • 啟動代理工具(如 Charles),設(shè)置 SSL 代理。
  • 在工具中找到目標請求,修改 Cookie 請求頭或 Set-Cookie 響應(yīng)頭。

注意事項

  • 跨域限制:前端 Hook 受同源策略限制,無法直接訪問跨域請求的 Cookie。
  • 安全性:修改 Cookie 可能導致隱私泄露或會話劫持,需遵守法律法規(guī)。
  • 兼容性Object.defineProperty 對某些特殊 Cookie 可能失效,可改用 Proxy 增強攔截。

根據(jù)具體需求選擇合適的方法。如果是用于調(diào)試或分析,推薦使用瀏覽器開發(fā)者工具的 Network 面板直接查看 Cookie 變化。

以上就是JavaScript實現(xiàn)瀏覽器Cookie攔截與修改的操作方法的詳細內(nèi)容,更多關(guān)于JavaScript瀏覽器Cookie攔截與修改的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • js調(diào)試系列 斷點與動態(tài)調(diào)試[基礎(chǔ)篇]

    js調(diào)試系列 斷點與動態(tài)調(diào)試[基礎(chǔ)篇]

    上幾篇文章已經(jīng)為大家介紹了js調(diào)試系列的一些基礎(chǔ)知識,支持亂碼兄弟為大家?guī)砹薺s斷點與動態(tài)調(diào)試方法,需要的朋友可以參考下
    2014-06-06
  • 基于pdf.js實現(xiàn)文本劃詞高亮效果

    基于pdf.js實現(xiàn)文本劃詞高亮效果

    最近有一個需求,需要對于pdf文本進行操作,對接ai大模型對pdf文檔進行高效解讀,其中一個功能就是對于pdf的文本進行劃詞高亮,用戶可進行閱讀標記,本文給大家介紹了如何基于pdf.js實現(xiàn)文本劃詞高亮效果,需要的朋友可以參考下
    2024-05-05
  • javascript實現(xiàn)跨域的方法匯總

    javascript實現(xiàn)跨域的方法匯總

    這篇文章主要給大家匯總介紹了javascript實現(xiàn)跨域的方法的相關(guān)資料,需要的朋友可以參考下
    2015-06-06
  • JS與jQ讀取xml文件的方法

    JS與jQ讀取xml文件的方法

    本文通過代碼實例給大家講解js讀取xml文件及jq讀取xml文件的方法,對本文感興趣的朋友一起學習吧
    2015-12-12
  • select標簽設(shè)置默認選中的選項方法

    select標簽設(shè)置默認選中的選項方法

    下面小編就為大家分享一篇select標簽設(shè)置默認選中的選項方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • JavaScript如何生成二維數(shù)組

    JavaScript如何生成二維數(shù)組

    這篇文章主要介紹了JavaScript如何生成二維數(shù)組問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • JavaScript如何實現(xiàn)跨域請求

    JavaScript如何實現(xiàn)跨域請求

    這篇文章主要為大家詳細介紹了JavaScript如何實現(xiàn)跨域請求,告訴大家什么是跨域請求?什么時候會用到跨域請求?感興趣的小伙伴們可以參考一下
    2016-08-08
  • 深入了解JavaScript中的函數(shù)式編程

    深入了解JavaScript中的函數(shù)式編程

    JavaScript是一門多范式的編程語言,其中函數(shù)式編程成為了一種受歡迎的范式之一,本文將帶您深入了解JavaScript函數(shù)式編程的核心概念和技術(shù),需要的可以參考一下
    2023-06-06
  • js中數(shù)組排序sort方法的原理分析

    js中數(shù)組排序sort方法的原理分析

    這篇文章主要介紹了js中數(shù)組排序sort方法的原理,以實例形式分析了sort排序方法的運行機制,具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • JS獲取IMG圖片高寬的簡單實例

    JS獲取IMG圖片高寬的簡單實例

    下面小編就為大家?guī)硪黄狫S獲取IMG圖片高寬的簡單實例。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05

最新評論