想写这样一个 chrome 插件:在 post 数据到服务器之前,弹出一个界面,用户可以修改 post 的数据,确认后再发送。

2014-05-03 22:19:53 +08:00
 wuhx
搜索了一圈,发现chrome有webrequst和declarativeWebRequest的api可以在发送request之前做点hook。

参照官方栗子写了个测试插件
https://developer.chrome.com/extensions/webRequest#event-onBeforeRequest

chrome.webRequest.onBeforeRequest.addListener(
function(info) {
if(info.method == "POST") {
info['requestBody']['formData']['pwd'] = "Hello"
alert("POSTING:" + JSON.stringify(info.requestBody.formData.pwd))
}
return {redirectUrl: info.url};
},
{urls: ["*://*/*"]},
["blocking", "requestBody"]);

可以看到post的数据,也能修改。 但是尼玛,没有办法把修改后的数据传递出去啊,return类型只有重定向和取消requset!

还能有其他什么方法吗?或者oprea,firefox上可以也行。
7119 次点击
所在节点    Chrome
13 条回复
csx163
2014-05-03 22:43:59 +08:00
fiddler
sneezry
2014-05-03 22:44:21 +08:00
LZ变通一下啦,你POST的数据更改后自己加个标注字段,比如_modified=1,然后你的扩展block的时候判断一下,如果有这个字段就放行啦
zjgood
2014-05-03 22:52:42 +08:00
@csx163 fidller +1,这货明显比插件更有效率
Shieffan
2014-05-03 23:03:51 +08:00
之前我研究过,Chrome目前只能修改request跟response的header,不能修改body,应该没有绕过的办法
Aphsss
2014-05-04 08:36:54 +08:00
burpsuite
sneezry
2014-05-04 08:41:12 +08:00
@Shieffan 可以先block,修改完再提交一遍啊。
Shieffan
2014-05-04 08:47:34 +08:00
@sneezry 撸主说了,block之后只能redirect或cancel,怎么再提交,这又不是修改DOM
sneezry
2014-05-04 08:49:39 +08:00
@Shieffan cancel啊,然后修改完点确定就还是submit重新提交。
Shieffan
2014-05-04 08:53:33 +08:00
@sneezry 那这次提交的跟上次会有任何区别么?Dom内容又没变,提交的还不是一样
sneezry
2014-05-04 09:03:50 +08:00
@Shieffan 不对的,return cancel之前可以做很多事,比如重新构造一个Ajax提交数据,再或者给出一个浮动层里面重新给出一个form。而重新提交时可以新定义一个对服务器无意义的字段,或者增加一个header来让扩展识别是否是修改过的提交,避免扩展将修改过的提交也屏蔽掉。
Shieffan
2014-05-04 09:27:08 +08:00
@sneezry 是可以通过发消息等方式修改tab的dom结构,但是我觉得这样并不能实现LZ的需求,在http body里面修改post的表单内容跟直接修改DOM来修改post内容完全是不同级别的难度,post数据的方式五花八门,可以有form,可以没form,可以是提取dom元素进行计算组合,可以混合进JS变量,我觉得根本没办法进行统一处理。
wuhx
2014-05-04 12:41:56 +08:00
多谢各位的回复

fiddler看起来相当强悍,只是mac下mono的界面太惨不忍睹了,有空再研究一下。

@sneezry @Shieffan 两位比较专业,我属于js还没入门的,我理解sneezry的思路是:在cancel之前主动把修改后的数据POST到服务。理论上应该可行吧。

另外,其实我自己想到的方案是:修改chrome代码,自己实现这个api,但是估计工作量很大,重在折腾了。
wuhx
2014-05-04 21:21:07 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110996

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX