我正在开发一个工具(使用node.js构建)来修改每个请求的网页的某些值。
举个例子,如果我的html文档是这样的元素:
<div id="mydiv"> This is a div </div>
我的工具会在特定时刻将其更新为:
<div id="aka67213h82h7"> This is a div </div>
价值总是不同的。这是随机的。我的目标是阻止其他人使用此属性来篡改或从我的网页中提取信息。
现在,为了保持一切正常,我还需要更新CSS文件和JS文件。我假设一个网站只有HTML,CSS和JavaScript代码。 CSS文件没有问题,我正在处理它们。但JS脚本是一个不同的故事..
如果我有这行代码:
var element = document.getElementById("mydiv");
我想更新该行并将"mydiv"
更改为"aka67213h82h7"
。这是可能的,我这样做。但是,如果我们将代码重写为:
var idOfElement = "mydiv";
var element = document.getElementById(idOfElement);
我唯一能提取的是idOfElement
是一个包含我想要更新的值的变量。这只是一个简单的例子,因为参数也可以是performFunction()
等等......
如果像getElementById()
这样的函数的参数是Literal我能够做我想要的。但如果是标识符或二进制表达式等,这就成了我的问题。那么,我怎样才能确定那一刻这些论点的价值呢?
答案 0 :(得分:0)
如果我做得对,你可以用:
更新你的身份证elements.id = 'randomValue';
答案 1 :(得分:0)
将document.getElementById()
元素内的script
每次调用都匹配的方法替换id
元素中的script
和元素本身替换为{{1}生成的随机字符串}}
URL.createObjectURL()
window.onload = function() {
var script = document.scripts[0];
var ids = script.textContent.match(/document.getElementById\(.+\)/g);
var _oldids = ids.toString()
.replace(/document|\.getElementById|\(|\)|,/g, "")
.split("");
var _newids = [];
_oldids.forEach(function(id) {
var _id = URL.createObjectURL(new Blob([]));
URL.revokeObjectURL(_id);
_id = _id.replace(/^blob\:.+\//g, "");
_newids.push(_id);
script.textContent = script.textContent
.replace(new RegExp('"' + id + '"'), '"' + _id + '"');
document.getElementById(id).id = _id;
});
console.log(_oldids, _newids, document.documentElement.outerHTML);
}