修复使用插件后登录失败的问题

This commit is contained in:
sickle committed 2025-02-08 15:59:47 +08:00
1 parent 1b738b81ef
commit 0f8a75487f
3 files changed
+46 -49

No files matched your search

+32 -32
View File
@@ -271,9 +271,30 @@ function detectWebpack(pageContent) {
return null;
}
// 监听网络请求
// 修改 onHeadersReceived 监听器
chrome.webRequest.onHeadersReceived.addListener(
(details) => {
// 获取响应体的函数
const getResponseBody = async () => {
// 仅对 HTML 和 JS 响应进行检测
const contentType = details.responseHeaders
.find(h => h.name.toLowerCase() === 'content-type')?.value.toLowerCase() || '';
if (!contentType.includes('text/html') &&
!contentType.includes('javascript') &&
!contentType.includes('application/json')) {
return null;
}
return new Promise(resolve => {
chrome.tabs.sendMessage(details.tabId, {
type: 'SCAN_CONTENT'
}, response => {
resolve(response?.content || null);
});
});
};
if (details.type === 'main_frame') {
const headers = details.responseHeaders;
if (headers) {
@@ -376,7 +397,6 @@ chrome.webRequest.onHeadersReceived.addListener(
});
chrome.cookies.getAll({url: details.url}, (cookies) => {
if (cookies && cookies.length > 0) {
console.log(cookies);
const cookieNames = cookies.map(cookie => cookie.name).join(';');
const tech = identifyTechnologyFromCookie(cookieNames);
if (tech) {
@@ -400,11 +420,11 @@ chrome.webRequest.onHeadersReceived.addListener(
}
});
// 在处理完响应头后,尝试检测 webpack
fetch(details.url)
.then(response => response.text())
.then(body => {
const webpackTech = detectWebpack(body);
console.log(details.url);
// 异步检测 webpack
getResponseBody().then(content => {
if (content) {
const webpackTech = detectWebpack(content);
if (webpackTech && !fingerprints.builder) {
fingerprints.builder = webpackTech;
serverFingerprints.set(details.tabId, fingerprints);
@@ -418,36 +438,16 @@ chrome.webRequest.onHeadersReceived.addListener(
technology: fingerprints.technology,
security: fingerprints.security,
analytics: fingerprints.analytics,
builder: fingerprints.builder
builder: fingerprints.builder
}
}).catch(() => {});
} catch (e) {}
}
})
.catch(() => {/* 忽略错误 */});
// 存储该标签页的指纹信息
serverFingerprints.set(details.tabId, fingerprints);
// 延迟发送消息,等待内容脚本加载
setTimeout(() => {
try {
chrome.tabs.sendMessage(details.tabId, {
type: 'UPDATE_FINGERPRINTS',
fingerprints: {
server: fingerprints.server,
serverComponents: fingerprints.serverComponents,
headers: Object.fromEntries(fingerprints.headers),
technology: fingerprints.technology,
security: fingerprints.security,
analytics: fingerprints.analytics,
builder: fingerprints.builder
}
}).catch(() => {
});
} catch (e) {
}
}, 500);
});
// 返回响应头
return { responseHeaders: details.responseHeaders };
}
}
},
+13 -16
View File
@@ -140,24 +140,21 @@ const SCANNER_CONFIG = {
get FINGER() {
return {
type: 'FINGER',
patterns: SCANNER_CONFIG.FINGER.PATTERNS
};
}
},
// 统一的黑名单配置
BLACKLIST: {
// 值黑名单 - 从 ID_KEY 配置中移出
SHORT_VALUES: new Set([
'up','in','by','of','is','on','to',
'age','all','app','ang','bar','bea','big','bug','com','con','cry','dom','dow',
'emp','ent','eta','eye','for','get','gen','has','hei','hid','ing','int','ken',
'key','lea','log','low','met','mod','new','nor','not','num','red','obj','old',
'out','pic','pre','pro','pop','pun','put','rad','ran','ref','red','reg','ren',
'rig','row','sea','set','seq','shi','str','sub','sup','sun','tab','tan','tip',
'top','uri','url','use','ver','via'
'age','all','app','ang','bar','bea','big','bug','can','com','con','cry','dom',
'dow','emp','ent','eta','eye','for','get','gen','has','hei','hid','ing','int',
'ken','key','lea','log','low','met','mod','new','nor','not','num','red','obj',
'old','out','pic','pre','pro','pop','pun','put','rad','ran','ref','red','reg',
'ren','rig','row','sea','set','seq','shi','str','sub','sup','sun','tab','tan',
'tip','top','uri','url','use','ver','via'
]),
MEDIUM_VALUES: new Set([
'null','node','when','face','read','load','body','left','mark','down',
@@ -174,13 +171,13 @@ const SCANNER_CONFIG = {
'line','send','mess','calc','http','rame'
]),
LONG_VALUES: new Set([
'about','alias','apply','array','beare','begin','black','break','broad',
'catch','class','close','clear','click','clude','color','count','cover',
'croll','crypt','error','false','fault','fetch','final','found','gener',
'green','group','guard','index','inner','input','inter','light','login',
'opera','param','parse','panel','place','print','phony','radio','range',
'right','refer','serve','share','shift','style','tance','title','token',
'tract','trans','trave','valid','video','white','write',
'about','alias','apply','array','basic','beare','begin','black','break',
'broad','catch','class','close','clear','click','clude','color','count',
'cover','croll','crypt','error','false','fault','fetch','final','found',
'gener','green','group','guard','index','inner','input','inter','light',
'login','opera','param','parse','panel','place','print','phony','radio',
'range','right','refer','serve','share','shift','style','tance','title',
'token','tract','trans','trave','valid','video','white','write',
'button','cancel','create','double','finger','global','insert','module',
'normal','object','popper','triple','search','select','simple','single',
+1 -1
View File
@@ -1,7 +1,7 @@
// 正则表达式缓存
const regexCache = {
coordPattern: /^coord/,
valuePattern: /^\/|true|false|register|signUp|name|http/i,
valuePattern: /^\/|true|false|register|signUp|name|basic|http/i,
chinesePattern: /^[\u4e00-\u9fa5]+$/,
keywordPattern: /^func|variable|input|true|false|newline|null|http|unexpected|error|data|object|brac|beare|str|self|void|num|atom|opts|token|params|result|con|text|stor|sup|pun|emp|this|key|com|ent|met|opera|return|case|pare|ident|reg|invalid/i,
camelCasePattern: /\b[_a-z]+(?:[A-Z][a-z]+)+\b/,