我正在运行web-ext lint
并收回一些错误:
UNSAFE_VAR_ASSIGNMENT
对innerHTML的不安全分配
由于安全性和性能问题,可能无法使用尚未充分消毒的动态值进行设置。这可能导致安全问题或相当严重的性能下降。
有问题的代码基本上是这样做的:
var html = '<style>body { margin: 0; } iframe { border: none; }' +
'</style><iframe src="' + URL.createObjectURL(blob) +
'" width="100%" height="100%"></iframe>';
document.documentElement.innerHTML = html;
我不是一个很大的JS开发人员,所以我理解这里的安全漏洞,但我真的不知道什么是让AMO和linter高兴的最佳解决方案。我想我需要将上面的字符串转换成一堆命令来代替节点吗?
答案 0 :(得分:3)
是的,那会更安全。对于上面的例子,它将是
var css = 'body { margin: 0; } iframe { border: none; }';
var style = document.createElement('style');
style.appendChild(document.createTextNode(css));
document.body.appendChild(style);
var frame = document.createElement('iframe');
frame.width = "100%";
frame.height = "100%";
frame.src = URL.createObjectURL(blob);
document.body.appendChild(frame);
要在有多种方法之前清除文档正文,请参阅Remove all content using pure JS。