Javascript 如何禁用浏览器开发工具?
我正在开发一个web应用程序,因为它可以访问下面的数据库,所以我需要能够禁用Safari、Chrome、Firefox和Internet Explorer中的开发工具,以及Firefox和所有类似应用程序中的Firebug。有办法做到这一点吗 注意:数据库提供的AJAX框架要求提供给数据库的任何内容都是可以修改的web参数,并且返回的任何内容都可以用JavaScript处理。因此,当它返回一个值,比如用户是否有权访问网站的某个部分时,它必须用JavaScript处理,开发人员工具可以访问JavaScript。所以这是必需的 更新:对于那些仍然认为我在做错误的假设的人,我问过供应商。以下是他们的回应: 以下是一些降低风险的建议: 1) 使用javascript模糊器对代码进行模糊处理,并仅提供 已售出应用程序的模糊版本;保持沉默 模糊版本供您自己进行编辑。这是一个在线 模糊器: 2) 使用描述性较低的名称;也许是“repeatedtasks.js”而不是 “security.js”作为“security.js”可能会对任何人来说都更加突出 将这类信息视为重要信息Javascript 如何禁用浏览器开发工具?,javascript,Javascript,我正在开发一个web应用程序,因为它可以访问下面的数据库,所以我需要能够禁用Safari、Chrome、Firefox和Internet Explorer中的开发工具,以及Firefox和所有类似应用程序中的Firebug。有办法做到这一点吗 注意:数据库提供的AJAX框架要求提供给数据库的任何内容都是可以修改的web参数,并且返回的任何内容都可以用JavaScript处理。因此,当它返回一个值,比如用户是否有权访问网站的某个部分时,它必须用JavaScript处理,开发人员工具可以访问Java
不,您不能执行此操作 开发者菜单位于客户端,由用户浏览器提供
此外,浏览器开发人员应该与服务器端数据库代码无关,如果与服务器端数据库代码无关,则需要进行一些maaaaajor重组。否。无法为最终用户禁用开发人员工具
如果您的应用程序不安全,如果用户可以访问开发人员工具,那么它就是不安全的。如果您的框架要求您在客户端进行授权,那么 您需要更改您的框架 当你把一个应用程序放在野外,你不信任的用户可以访问它;你必须在沙地上划一条线
- 您拥有的物理硬件;并且可以锁在坚固的门后。在这里,你可以做任何你喜欢的事情;这是一个保存数据库的好地方,可以执行授权功能来决定谁可以处理数据库
- 其他一切包括客户端计算机上的浏览器;移动电话;位于办公室大堂的便利亭你不能相信这些!永远你无能为力,这意味着你可以完全确定这些机器没有欺骗你和你的客户。你无法控制它,所以你永远无法希望知道发生了什么
- 在培训/学习计划中要求一周或两周
- 要求供应商提供足够的支持票证,以确定如何执行服务器端验证
- 这是一个明确的警告,如果该工具无法进行服务器端验证,那么当您的整个数据库被泄漏/破坏/等等时,您将在《华尔街日报》的头版被取笑
- 你的开发环境不可能是这样的大脑死亡。这不可能
我强烈建议您通过电子邮件向上司发送以下信息:
请记住,如果您允许某人下载某些数据,他可以随心所欲地使用这些数据。不要忘记像这样的工具。即使您锁定了所有浏览器的控制台,也可以在客户端修改http请求,即使您使用HTTPS。Fiddler可以捕获来自浏览器的请求,用户可以修改它并重新播放恶意输入。除非您保护AJAX请求,但我不知道如何实现这一点
只是不要相信从任何浏览器收到的任何输入 您可以通过定义以下内容轻松禁用开发人员工具:
Object.defineProperty(console, '_commandLineAPI', { get : function() { throw 'Nooo!' } })
我在这里找到了答案:在发布此答案时(2015年)更新,这一技巧是可能的。现在(2017年)浏览器已经成熟以下技巧不再有效强>
是的,这是可能的。Chrome将所有控制台代码包装在
with ((console && console._commandLineAPI) || {}) {
<code goes here>
}
这是主要的诀窍 我找到了一种方法,当用户打开开发工具时,可以使用
调试器
关键字停止页面工作
(function(){
debugger
}())
不能禁用开发人员工具。但是你可能会惹恼任何一个试图在你的网站上使用开发者工具的人,如果你尝试javascript代码,代码就会一直中断
(function () {
(function a() {
try {
(function b(i) {
if (('' + (i / i)).length !== 1 || i % 20 === 0) {
(function () { }).constructor('debugger')()
} else {
debugger
}
b(++i)
}
)(0)
} catch (e) {
setTimeout(a, 5000)
}
}
)()
}
)();
是的,这是一个可怕的设计,你不能禁用开发工具。客户端UI应该位于RESTAPI之上,RESTAPI的设计方式是用户无论如何都不能修改任何已经有效的输入 您需要对输入进行服务器端验证。服务器端验证不必冗长而丰富,只需完成即可 例如,客户端可能有一个ui来显示所需的字段等,但服务器端只需将一个布尔值设置为true,如果字段验证失败,则将其设置为false,然后拒绝整个请求 此外,您的客户端应用程序应该经过身份验证。你可以用十万种方法做到这一点。但我喜欢做的一件事是使用ADFS直通身份验证。他们通过adfs登录到站点,adfs会生成一个会话cookie。该会话cookie被传递到RESTAPI(都在同一个域上),我们通过该会话cookie对RESTAPI的请求进行身份验证。这样,没有通过登录窗口登录的人就不能调用RESTAPI。它只能
(function () {
(function a() {
try {
(function b(i) {
if (('' + (i / i)).length !== 1 || i % 20 === 0) {
(function () { }).constructor('debugger')()
} else {
debugger
}
b(++i)
}
)(0)
} catch (e) {
setTimeout(a, 5000)
}
}
)()
}
)();
$('body').keydown(function(e) {
if(e.which==123){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 73){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 75){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 67){
e.preventDefault();
}
if(e.ctrlKey && e.shiftKey && e.which == 74){
e.preventDefault();
}
});
!function() {
function detectDevTool(allow) {
if(isNaN(+allow)) allow = 100;
var start = +new Date();
debugger;
var end = +new Date();
if(isNaN(start) || isNaN(end) || end - start > allow) {
console.log('DEVTOOLS detected '+allow);
}
}
if(window.attachEvent) {
if (document.readyState === "complete" || document.readyState === "interactive") {
detectDevTool();
window.attachEvent('onresize', detectDevTool);
window.attachEvent('onmousemove', detectDevTool);
window.attachEvent('onfocus', detectDevTool);
window.attachEvent('onblur', detectDevTool);
} else {
setTimeout(argument.callee, 0);
}
} else {
window.addEventListener('load', detectDevTool);
window.addEventListener('resize', detectDevTool);
window.addEventListener('mousemove', detectDevTool);
window.addEventListener('focus', detectDevTool);
window.addEventListener('blur', detectDevTool);
}
}();