如何防止用户在其浏览器中编辑我的代码?


11

描述

我正在设计一个Node.JS应用程序(更像一个完整的网站)。该应用程序将发送五个JavaScript文件,并将具有<script>将它们链接在一起的标签。

如何防止用户和攻击者窥视和编辑我的代码

  • 一个例子是:

    • Ctrl+ Shift+I

    • Devtools的 goto Sources中,选择一个文件进行编辑(即index.html)并进行编辑

    • Ctrl+ S会导致实时编辑发生

我想防止上述例子的发生...可能吗?


这是我的想法:

我将创建另一个客户端JavaScript文件prevent_keys.js

它将监听Ctrl+ Shift+ I

如果返回true(即按下了按键),它将log显示按键。

但是,这不会阻止用户直接使用Devtools。


16
您不能阻止任何人看到或修改您在浏览器中运行的javascript。不行
jfriend00

7
仅仅因为对一个问题的回答是“您不能。”,并不意味着它应该被否决。
RubberDuck

1
密切相关的问题:仅AJAX表单上的JavaScript验证提交。尤其要查看其可接受的答案,其琐碎的示例说明如何向服务器发送POST调用,该调用看起来与来自客户端的POST调用相同,即使它甚至不是来自Web浏览器。
8bittree '18 -10-29

Answers:


35

从字面上看,您不能阻止用户访问和修改您发送给他们的内容。您无法控制浏览器,使用的浏览器,或者实际上是否通过浏览器下载源代码。您正在别人的设备上执行代码。您不应该也不能假设任何有关此设备完整性的信息。

如果您有不想公开的代码,请不要将其发送到浏览器。而是让浏览器将请求发送到执行密码的服务器。

举一个具体的例子,不要在客户端上检查密码。可以将客户端修改为始终告诉服务器“密码正确”。而是必须在您信任的服务器上进行身份验证。


4
“可以修改客户端以始终告诉服务器“密码正确”。” 咳嗽 libssh 咳嗽
菲利普·肯德尔

非常感谢!我正在发送处理程序以进行登录,注销和注册。我将其更改为服务器中的路由。
Edwin Pratt

23

你不能 计算的基本规则之一:您不能信任客户端。无论您想到什么聪明的方案,只要我能控制客户,我都可以解决。


2
我已经将所有验证,上传,下载,userAccouts()处理程序移至服务器的include中。
Edwin Pratt

1
“您不能信任客户”只是问题的一方面。另一边说:“您不是客户的所有者”。运行您的JavaScript的浏览器不是您的,运行该浏览器的操作系统不是您的,并且运行该浏览器的硬件也不是您的。不管这东西的主人恰好与您发送给他们的数据做的就是关你的事尊重您的客户不要试图篡夺他们的东西是一个问题。
cmaster-恢复莫妮卡

2

您为什么不希望修改代码?

安全?信任?商业秘密?

然后,不发送代码,让客户端发送请求,然后返回结果。也许不是私有或特权结果,仅完成一项操作就足以满足许多UI的需要。

因为您自己的代码的略微修改版本会损害您的利润?

使用代码模糊处理程序,名称修饰符和琐碎的代码段。

这些技术提高了实际技能水平的标准,并且使您的网站略有变体。请注意,这些技术可以使您的代码变慢,可以引入有趣且毫无意义的错误和错误消息,但是仍然可以被具有正确工具和/或技能的人所克服。因此,请真正考虑是否值得。在一天结束时,任何人都可以实际上编写相同的代码。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.