spot body sanitizer

This commit is contained in:
nick-delirium 2024-09-20 10:44:18 +02:00
parent 37701af9d4
commit 32001b1c8b
No known key found for this signature in database
GPG key ID: 93ABD695DF5FDBA0
2 changed files with 87 additions and 18 deletions

View file

@ -2,7 +2,7 @@
"name": "wxt-starter", "name": "wxt-starter",
"description": "manifest.json description", "description": "manifest.json description",
"private": true, "private": true,
"version": "1.0.7", "version": "1.0.8",
"type": "module", "type": "module",
"scripts": { "scripts": {
"dev": "wxt", "dev": "wxt",

View file

@ -30,38 +30,106 @@ export const rawRequests: (TrackedRequest & {
startTs: number; startTs: number;
duration: number; duration: number;
})[] = []; })[] = [];
const sensitiveParams = new Set([
"password",
"pass",
"pwd",
"mdp",
"token",
"bearer",
"key",
"secret",
"email",
"ssn",
"name",
"firstname",
"lastname",
"birthdate",
"dob",
"address",
"x-api-key",
"www-authenticate",
"x-csrf-token",
"x-requested-with",
"x-forwarded-for",
"x-real-ip",
"cookie",
"authorization",
"auth",
"proxy-authorization",
"set-cookie",
]);
function filterHeaders(headers: Record<string, string>) { function filterHeaders(headers: Record<string, string>) {
const filteredHeaders: Record<string, string> = {}; const filteredHeaders: Record<string, string> = {};
const privateHs = [
"x-api-key",
"www-authenticate",
"x-csrf-token",
"x-requested-with",
"x-forwarded-for",
"x-real-ip",
"cookie",
"authorization",
"auth",
"proxy-authorization",
"set-cookie",
];
if (Array.isArray(headers)) { if (Array.isArray(headers)) {
headers.forEach(({ name, value }) => { headers.forEach(({ name, value }) => {
if (privateHs.includes(name.toLowerCase())) { if (sensitiveParams.has(name.toLowerCase())) {
return; filteredHeaders[name] = "******";
} else { } else {
filteredHeaders[name] = value; filteredHeaders[name] = value;
} }
}); });
} else { } else {
for (const [key, value] of Object.entries(headers)) { for (const [key, value] of Object.entries(headers)) {
if (!privateHs.includes(key.toLowerCase())) { if (sensitiveParams.has(key.toLowerCase())) {
filteredHeaders[key] = "******";
} else {
filteredHeaders[key] = value; filteredHeaders[key] = value;
} }
} }
} }
return filteredHeaders; return filteredHeaders;
} }
// JSON or form data
function filterBody(body: any) {
if (!body) {
return body;
}
let parsedBody;
let isJSON = false;
try {
parsedBody = JSON.parse(body);
isJSON = true;
} catch (e) {
// not json
}
if (isJSON) {
obscureSensitiveData(parsedBody);
return JSON.stringify(parsedBody);
} else {
const params = new URLSearchParams(body);
for (const key of params.keys()) {
if (sensitiveParams.has(key.toLowerCase())) {
params.set(key, "******");
}
}
return params.toString();
}
}
function obscureSensitiveData(obj: Record<string, any> | any[]) {
if (Array.isArray(obj)) {
obj.forEach(obscureSensitiveData);
} else if (obj && typeof obj === "object") {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
if (sensitiveParams.has(key.toLowerCase())) {
obj[key] = "******";
} else if (obj[key] !== null && typeof obj[key] === "object") {
obscureSensitiveData(obj[key]);
}
}
}
}
}
export function createSpotNetworkRequest( export function createSpotNetworkRequest(
trackedRequest: TrackedRequest, trackedRequest: TrackedRequest,
trackedTab?: number, trackedTab?: number,
@ -97,10 +165,11 @@ export function createSpotNetworkRequest(
: 0; : 0;
const status = getRequestStatus(trackedRequest); const status = getRequestStatus(trackedRequest);
const body = trackedRequest.reqBody ? filterBody(trackedRequest.reqBody) : "";
const request: SpotNetworkRequest = { const request: SpotNetworkRequest = {
method: trackedRequest.method, method: trackedRequest.method,
type, type,
body: trackedRequest.reqBody, body,
requestHeaders, requestHeaders,
responseHeaders, responseHeaders,
time: trackedRequest.timeStamp, time: trackedRequest.timeStamp,