当浏览器在客户端执行 JavaScript 并且JavaScript 附加从 form 提交查询时,如何在Chrome 的开发工具中调试(折叠网页)。
例如,我有一个带有表单的页面,其中:
- 文本 + 密码作为带有名称的输入字段 -
password
&login
- 当我点击提交时,浏览器执行了 1000 次 JavaScript 脚本,但在结果中我只看到一个带有神奇添加的查询参数的完整查询(这些参数不存在于 HTML 表单中)
- 保留日志没有帮助,因为浏览器在提交期间会进行重定向(点击按钮时)
- 这些不是隐藏字段类型
- 也没有内联 JavaScript,但
.js
在幕后有一个大文件
我想要的是找到负责插入那些“神奇”查询片段的 JavaScript 代码。
我可以补充一点,这个查询参数值是通过组合之前提交的输入文本/密码字段值创建的,例如:
param name | param value
(by combine login/password delimited by val2)
---------------------------------------------------------------------------------
hrsxcvaqr1ib8slcxmalzas321 = someloginval2somepassword
// or when I input no login and password
hrsxcvaqr1ib8slcxmalzas321 = undefinedval2undefined
hiddenFieldName=hiddenFieldVal&login=somelogin&password=somePassword&hrsxcvaqr1ib8slcxmalzas321=undefinedval2undefined
通过反向查找,我知道向查询中注入了什么:
- 我可以在 Chrome 开发工具的哪个位置输入?
- 当 val2 发生字符串附加或连接时,我需要输入什么断点或条件才能停止执行?
我正在尝试
window.addEventListener("beforeunload", function() { debugger; }, false)
但是当我看到这样的事情时,这并没有帮助。
这是表单提交 js 入口点
onsubmit="zablokujPrzycisk(this)">
function zablokujPrzycisk(a) {
var c = $(a);
var b = c.find("button");
b.disable()
}
仍然没有任何帮助
我想添加断点以匹配表单输入字段的(用法)
好的,我发现这是修改表单的地方
dX.event = {
global: {},
add: function(n, h, b, l, m) {
var k, a, s, q, f, j, c, p, d, o, r, g = dX._data(n);
if (!g) {
return
}
if (b.handler) {
q = b;
b = q.handler;
m = q.selector
}
if (!b.guid) {
b.guid = dX.guid++
}
if (!(a = g.events)) {
a = g.events = {}
}
if (!(j = g.handle)) {
/////////////// 这里 ////////////////
j = g.handle = function(t) {
return typeof dX !== eF && (!t || dX.event.triggered !== t.type) ? dX.event.dispatch.apply(j.elem, arguments) : eB
}
//////////////////////////////////////////////////////////////////////
dispatch: function(j) {
j = dX.event.fix(j);
var g, f, a, l, h, b = [], c = b5.call(arguments), k = (dX._data(this, "events") || {})[j.type] || [], d = dX.event.special[j.type] || {};
c[0] = j;
j.delegateTarget = this;
if (d.preDispatch && d.preDispatch.call(this, j) === false) {
return
}
b = dX.event.handlers.call(this, j, k);
g = 0;
while ((l = b[g++]) && !j.isPropagationStopped()) {
j.currentTarget = l.elem;
h = 0;
while ((a = l.handlers[h++]) && !j.isImmediatePropagationStopped()) {
if (!j.namespace_re || j.namespace_re.test(a.namespace)) {
j.handleObj = a;
j.data = a.data;
f = ((dX.event.special[a.origType] || {}).handle || a.handler).apply(l.elem, c);
if (f !== eB) {
if ((j.result = f) === false) {
j.preventDefault();
j.stopPropagation()
}
}
}
}
}
if (d.postDispatch) {
d.postDispatch.call(this, j)
}
return j.result
},
///////////////////// 我们得到类似的东西 //////////
$('[data-formularz-log-in]').submit(function(e) {
var a = document.createElement("input");
var b = $(this).find('[name="login"]').val();
var c = $(this).find('[name="blabla"]').val();
var d = $(this).find('[name="password"]').val();
var f = b + 'val2' + d;
a.setAttribute('type', 'hidden');
a.setAttribute('name', 'hrsxcvaqr1ib8slcxmalzas321');
a.setAttribute('value', f);
$(this)[0].appendChild(a)
});
堆栈跟踪 :
(anonymous) (VM6228:formatted:5)
dispatch (min.js?v=91:formatted:1858)
g.handle (min.js?v=91:formatted:1669)
但我仍然不知道hrsxcvaqr1ib8slcxmalzas321这个名字是如何/或从哪里来的?