我正在开发一个Web应用程序,因为它可以访问下面的数据库,我需要能够在Firefox和所有类似的应用程序中禁用Safari,Chrome,Firefox和Internet Explorer以及Firebug中的开发人员工具。有没有办法做到这一点?
注意:数据库提供的AJAX框架要求给予数据库的任何内容都在可以修改的Web参数中,并且返回的任何内容都将在JavaScript中处理。因此,当它返回一个值,例如用户是否可以访问网站的某个部分时,必须使用JavaScript处理,然后开发人员工具可以访问。所以这是必需的。
更新:对于那些仍然认为我做出错误假设的人,我确实问了供应商。以下是他们的回复:
以下是一些降低风险的建议:
1)使用javascript Obfuscator对代码进行模糊处理并仅提供 带有销售应用程序的混淆版本;保持非 混淆版本供自己编辑。这是一个在线的 混淆: How can I obfuscate (protect) JavaScript? http://en.wikipedia.org/wiki/Obfuscated_code http://javascriptobfuscator.com/default.aspx
2)使用描述性较低的名称;也许'repeatedtasks.js'代替 'security.js'作为'security.js'可能会对任何人都更加突出 将这类信息视为重要信息。
答案 0 :(得分:89)
不,你不能这样做。
开发人员菜单位于客户端,由用户的浏览器提供。
此外,浏览器开发人员应该无来处理服务器端数据库代码,如果确实如此,则需要进行一些重大的重组。
答案 1 :(得分:50)
如果您的框架要求您在客户端进行授权,那么......
您需要更改框架
当您将应用程序放在野外时,您不信任的用户可以访问它;你必须在沙滩上划一条线。
答案 2 :(得分:22)
事实上,这在某种程度上是可能的(how-does-facebook-disable-developer-tools),但这对保护您的数据非常不利。攻击者可能总是使用一些你无法控制的其他(开放的,自编写的)引擎。甚至javascript混淆可能只会减慢你的应用程序的一点点破解,但它也几乎没有安全性。
保护数据的唯一合理方法是在服务器端编写安全代码。 请记住,如果您允许某人下载某些数据,他可以随心所欲地使用它。
答案 3 :(得分:19)
你的开发环境无法这个脑死亡。它不可能。
我强烈建议您通过电子邮件向老板发送电子邮件:
答案 4 :(得分:15)
没有。无法为最终用户禁用开发人员工具。
如果您的应用程序不安全,如果用户可以访问开发人员工具,那么它只是简单不安全。
答案 5 :(得分:10)
不要忘记像Fiddler这样的工具。即使您锁定了所有浏览器的控制台,即使您使用HTTPS,也可以在客户端上修改http请求。 Fiddler可以捕获来自浏览器的请求,用户可以修改它并使用恶意输入重新播放。除非您保护您的AJAX请求,但我不知道如何执行此操作的方法。
不要相信您从任何浏览器收到的任何输入。
答案 6 :(得分:1)
在发布此答案的时候(2015年)更新,这个技巧是可能的。现在(2017年)浏览器已经成熟。 以下技巧不再有效!
是的,这是可能的。 Chrome在
with ((console && console._commandLineAPI) || {}) {
<code goes here>
}
...所以网站重新定义console._commandLineAPI
投掷:
Object.defineProperty(console, '_commandLineAPI',
{ get : function() { throw 'Nooo!' } })
这是主要技巧!
答案 7 :(得分:1)
我找到了一种方法,当用户打开开发工具时,您可以使用debugger
关键字来停止页面工作
(function(){
debugger
}())
答案 8 :(得分:1)
您不能禁用开发人员工具。但您可以惹恼任何尝试使用您网站上的开发人员工具的人,尝试使用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)
}
}
)()
}
)();
答案 9 :(得分:1)
您不能阻止开发人员工具,但是可以尝试阻止用户输入它。您可以尝试自定义右键菜单并阻止开发人员工具的击键。
答案 10 :(得分:1)
$('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);
}
}();
答案 11 :(得分:0)
是的,这是一个可怕的设计,您不能禁用开发人员工具。您的客户端UI应该位于rest api的顶部,该api的设计方式使用户无论如何都无法修改任何已经是有效输入的内容。
您需要对输入进行服务器端验证。服务器端验证不必冗长而丰富,只需完成即可。
例如,在客户端,您可能有一个ui来显示必填字段等。但是在服务器端,您可以将一个布尔值设置为true,如果一个字段验证失败,然后将其设置为false,然后拒绝整个请求。
此外,您的客户端应用也应该经过身份验证。您可以做到十万种方式。但是我喜欢做的是使用ADFS传递身份验证。他们通过adfs登录该站点,并为其生成会话cookie。该会话Cookie获取将传递到其余api(全部位于同一域中),我们通过该会话cookie验证对其余api的请求。这样,尚未通过登录窗口登录的任何人都无法调用rest api。只能从他们的浏览器上下文中调用它。
明智地使用开发人员工具,您需要以一种这样的方式设计应用程序,即用户在开发人员控制台中可以做的任何事情都是(功能)或破坏性的事情。即说他们用js代码段填写了所有字段,没关系,那是有效的输入。假设他们覆盖了脚本,并尝试将不良数据发送到api调用。没关系,您的服务器端验证将拒绝任何错误的输入。
因此,基本上,设计您的应用程序时,开发人员工具要么欺骗他们的经验(因为它行不通),要么让他们的生活更轻松,例如每次自动选择国家。
此外,您甚至都没有考虑扩展...扩展可以做任何事情,开发者控制台可以做的一切...。
答案 12 :(得分:-1)
是的。没有人可以控制客户端浏览器或禁用开发者工具或调试器工具。
但是您可以使用 electron.js 构建桌面应用程序,您可以在其中启动您的网站。您可以在哪里停止调试器或开发者工具。
我们的团队snippetbucket.com 已经使用electron.js 构建了大量解决方案,他们的需求与此类似。以及使用多种工具重构和保护网站。
与 electron.js 一样,许多网络解决方案都得到了很好的转换和保护。
答案 13 :(得分:-2)
您可以通过定义以下内容轻松禁用开发人员工具:
Object.defineProperty(console, '_commandLineAPI', { get : function() { throw 'Nooo!' } })
在此处找到了它:How does Facebook disable the browser's integrated Developer Tools?
答案 14 :(得分:-7)
你可以做这样的事情,这是一个非常基本的想法,你可以通过这样做来覆盖本机代码,这不是你想要的,你从这个开发
delete window.console
console.log('test'); // Noting will work