我正在分析Javascript中函数的参数/参数,看它们是否通过JS库被污染或未被污染。我把它分成了三个场景。第一个是如果所有的参数/参数都被污染了,那么结果将是真的。第二,如果所有的参数都是未污染的,那么结果将是假的。第三种情况是,当一些参数被污染,而另一些参数未被污染时,我想忽略这种情况。对于前两个场景,我编写了以下代码行。如果有人能帮我解决第三种情况。
function Shadow(x) {
this.val = x;
}
Shadow.getVal = function(v) {
return Shadow.isShadowed(v) ? v.val : v;
}
Shadow.isShadowed = function(x) {
return x instanceof Shadow;
}
function Taint() {
this._taintStack = [];
this.invokeFunPre = function (iid, f, base, args) {
let isTainted = false;
let n_args = [];
for(let i = 0; i < args.length; i++) {
if (Shadow.isShadowed(args[i])) {
n_args.push(Shadow.getVal(args[i]));
isTainted = true;
} else {
n_args.push(args[i]);
}
}
this._taintStack.push(isTainted);
return {f: f, base: base, args: n_args, skip: false};
}; 发布于 2021-07-19 23:44:15
使用以下命令更改invokeFunPre方法:
this.invokeFunPre = function (iid, f, base, args) {
let isTainted = false;
let n_args = [];
let initialTaint = Shadow.isShadowed(args[0]);
let mixed = false;
for(let i = 0; i < args.length; i++) {
if (Shadow.isShadowed(args[i])) {
n_args.push(Shadow.getVal(args[i]));
isTainted = true;
mixed = !(initialTaint && true);
} else {
n_args.push(args[i]);
mixed = initialTaint || false;
}
}
if(!mixed)
this._taintStack.push(isTainted);
return {f: f, base: base, args: n_args, skip: false};
};这要求至少有一个arg始终可用。您可以添加要调整的条件。但你明白我的意思。
https://stackoverflow.com/questions/68443061
复制相似问题