js 防止打开审核元素、查看源码、保存

2022-09-27  本文已影响0人  AAA_si

为了安全,有时候我们需要对我们的页面做一些限制。防止别人直接拿到你的代码。以下是我搜集多位大佬总结出来的。 (警告一定要看)

方法1 (有用却不完善)
// 复杂
window.onload = function() {
   //屏蔽键盘事件
   document.onkeydown = (e)=> {
    console.log(e);
    if (e.keyCode == 123) { // 屏蔽F12
     return false;
    } else if ((e.ctrlKey) && (e.shiftKey) && (e.keyCode == 73)) { // 屏蔽Ctrl+Shift+I
     return false;
    } else if ((e.shiftKey) && (e.keyCode == 121)) { // 屏蔽Shift+F10
     return false;
    } else if ((e.ctrlKey) && (e.keyCode == 85)) { // 屏蔽Ctrl+U
     return false;
    } else if ((e.ctrlKey) && (e.keyCode == 83)) { // 屏蔽Ctrl+S
     return false;
    }
   };
   //屏蔽鼠标右击
   document.oncontextmenu = ()=> {
    return false;
   }
}


// 简化
document.oncontextmenu = new Function("return false;");
document.onkeydown = document.onkeyup = document.onkeypress = function(event) {
      var e = event || window.event || arguments.callee.caller.arguments[0];
      if (e && (e.keyCode == 123 || e.keyCode == 116)) {
              e.returnValue = false;
              return (false);
      }
  }

⚠️ 这是两个方法;功能有差异但是都是为了防止审核元素。
⚠️ 主要实现:我们平时f12或右键鼠标和快捷键的一些操作;有用却不完善,原因我提前打开审核元素在输入网址仍可以看到代码

方法2 (有用,本人在用)
<script>
((function() {
    var callbacks = [],
        timeLimit = 50,
        open = false;
    setInterval(loop, 1);
    return {
        addListener: function(fn) {
            callbacks.push(fn);
        },
        cancleListenr: function(fn) {
            callbacks = callbacks.filter(function(v) {
                return v !== fn;
            });
        }
    }

    function loop() {
        var startTime = new Date();
        debugger;
        if (new Date() - startTime > timeLimit) {
            if (!open) {
                callbacks.forEach(function(fn) {
                    fn.call(null);
                });
            }
            open = true;
            window.stop();
            // alert('⚠️禁止'); 
            document.body.innerHTML = "";
        } else {
            open = false;
        }
    }
})()).addListener(function() {
    window.location.reload();
});
</script>
<script>
(function (a) {
    return (function (a) {
        return (Function('Function(arguments[0]+"' + a + '")()'))
    })(a)
})('bugger')('de', 0, 0, (0, 0));
</script>

⚠️ 主要实现:当你打开f12(也叫审核元素、检查)时;自动触动debugger;并且body中的内容为空。
⚠️⚠️⚠️ 代码涉及到setInterval 记得最后清除 window.clearInterval()。 需求不同清除的位置不同,本文我没写

方法3 (有用但不完善)
function inlobase_noF12() {
    while (1) {}
}
function inlojv_console() {
    if ((window.console && (console.firebug || console.table && /firebug/i.test(console.table()))) || (typeof opera == "object" && typeof opera.postError == "function" && console.profile.length > 0)) {
        inlobase_noF12()
    }
    if (typeof console.profiles == "object" && console.profiles.length > 0) {
        inlobase_noF12()
    }
}
inlojv_console();
window.onresize = function() {
    if ((window.outerHeight - window.innerHeight) > 200) {
        inlobase_noF12()
    }
};

⚠️ 主要实现:打开f12页面直接卡死;有用却不完善,原因我提前打开审核元素在输入网址仍可以看到代码 (同方法1类似)

总结

本文集多个大佬文章完成,仅供参考! 完

上一篇下一篇

猜你喜欢

热点阅读