Skip to main content

04 - Extension Data Storage and Web Requests

Secure Data Storage​

Extensions often need to store user preferences or authentication tokens.

chrome.storage.local vs chrome.storage.session​

  • chrome.storage.local: Persists across browser restarts. Stored unencrypted on the disk. Do not store sensitive secrets (like plaintext passwords or long-lived API keys) here.
  • chrome.storage.session: (Introduced in MV3) Kept only in memory and cleared when the browser session ends. Ideal for sensitive, temporary data like session tokens.

Storing a Session Token Securely​

// background.js
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
if (request.type === "SAVE_TOKEN") {
// Use session storage for sensitive tokens
chrome.storage.session.set({ authToken: request.token }).then(() => {
console.log("Token stored securely in memory.");
});
}
});

Intercepting HTTP Web Requests Securely​

If you must read web request headers (and declarativeNetRequest is not sufficient), you can use chrome.webRequest (though blocking is restricted).

Credential Leakage Prevention​

Be careful not to log or transmit intercepted credentials.

// background.js
chrome.webRequest.onBeforeSendHeaders.addListener(
function(details) {
for (let header of details.requestHeaders) {
if (header.name.toLowerCase() === 'authorization') {
// Ensure you do not log this header to an external analytics service!
console.log("Authorization header present for:", details.url);
}
}
return {requestHeaders: details.requestHeaders};
},
{urls: ["<all_urls>"]}, // Needs broad permissions; use cautiously
["requestHeaders"]
);