防止`运营商劫持`,CSP or JS方法处理
如果有https的条件,尽量使用https,可以很大程度上防止劫持的发生
csp
问题: 可能导致部分js被莫名的 blocked
辅助用法: 基于csp的report功能,对运行环境中加载的资源进行上报监控
js方式
var MutationObserver = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;
var whiteListForCSP = [
'http(s)?:\/\/(.)+.xxx.com',
'http(s)?:\/\/hm.baidu.com',
'http(s)?:\/\/res.wx.qq.com'
]
// Mutation 观察者对象能监听在某个范围内的 DOM 树变化
if(MutationObserver) {
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
// 返回被添加的节点,或者为null.
var nodes = mutation.addedNodes;
for (var i = 0; i < nodes.length; i++) {
var node = nodes[i];
var tagName = node.tagName && node.tagName.toLowerCase()
if ((tagName === "script" || tagName === "iframe" || tagName === "img" || tagName === "link") && node.src && (node.src.indexOf(window.location.protocol+"://"+window.location.hostname) !=0 && !new RegExp("^("+whiteListForCSP.join(")|(")+")").test(node.src))) {
try {
node.parentNode.removeChild(node);
console.log('拦截非白名单文件:', node.src);
} catch (e) {}
}
}
})
})
}
// 传入目标节点和观察选项
observer.observe(document, {
subtree: true,
childList: true
});</pre>
标题:防止`运营商劫持`,CSP or JS方法处理
作者:hugh0524
地址:https://blog.uproject.cn/articles/2019/04/29/1556508575314.html
0 0
