spot body sanitizer
This commit is contained in:
parent
37701af9d4
commit
32001b1c8b
2 changed files with 87 additions and 18 deletions
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue