javascript - chrome 扩展中的 POST 请求数据和地址栏更改
问题描述
我正在尝试制作一个 chrome 扩展,它将捕获 GET 和 POST 请求和参数,并通过调用带有 url 和参数的 api 来评估 XSS 漏洞。起初我尝试
chrome.webRequest.onBeforeRequest.addListener
了事件监听器,当我点击地址栏中的 url 时,它会为网站的每个组件捕获大量 GET 请求。这对我的 api 服务器来说负载太大了。所以我决定捕获地址栏内容,因为 GET 参数在那里也是可见的。为了捕获 POST 请求,我仍在使用
chrome.webRequest.onBeforeRequest.addListener
. 现在我要做的是: 1. 默认情况下,我的扩展程序应该只检查地址栏内容 2. 当在扩展程序弹出 html 中单击一个按钮时,只有我会捕获 POST 请求 最好的方法是什么?另外,有没有办法过滤 GET 请求捕获,以便它只捕获第一个 url 请求而不捕获后续组件请求?我觉得,chrome.webRequest.onBeforeRequest.addListener
如果不是为了捕获不必要的请求,使用它是非常有效的。
解决方案
您可以过滤侦听器type
以将其限制在主文档和框架中:
chrome.webRequest.onBeforeRequest.addListener(details => {
// do something with details.url
}, {
types: ['main_frame', 'sub_frame'],
urls: ['<all_urls>'],
});
在您的弹出窗口中,您可以显示一个复选框来切换该功能。
复选框的点击监听器会将状态保存到存储中:
document.querySelector('input[type=checkbox]').onclick = e => {
chrome.storage.local.set({watchPost: e.target.checked});
};
后台脚本将监听存储的变化并切换监听器:
chrome.storage.local.get('watchPost', _ => {
toggle(_.watchPost);
});
chrome.storage.onChanged.addListener(({watchPost}) => {
if (watchPost) {
toggle(watchPost.newValue);
}
});
function toggle(state) {
const event = chrome.webRequest.onBeforeRequest;
if (state) {
event.addListener(onPost, {urls: ['<all_urls>']});
} else {
event.removeListener(onPost);
}
}
function onPost(details) {
if (details.method === 'POST') {
// ..........
}
}
您还可以将侦听器限制为一个选项卡,请参阅文档。请注意,重新注册相同的函数引用将不起作用:您需要先手动调用 removeListener,然后使用新过滤器调用 addListener。
推荐阅读
- angular - Angular Material Object(...) 不是函数
- ios - Stripe paymentContext 确实将 paymentContext.selectedPaymentOption 设置为默认卡
- reactjs - 如何将事件处理程序添加到第三方表单组件中的按钮
- bash - 在 Jenkins 作业中共享数据 beetwen 脚本
- python - 如何将包含空格的字符串添加到 Tkinter Treeview 列
- javascript - JavaScript如何同时过滤两个数组
- go - 为什么它在复合文字中的换行符之前显示“缺少','
- email - 在 HYBRIS 下单后如何发送多封确认邮件?
- python - 对导入的困惑以及如何使用它
- batch-file - CMD 用户名变量