Javascript 假设情况:前端更换功能

Javascript 假设情况:前端更换功能,javascript,node.js,security,frontend,backend,Javascript,Node.js,Security,Frontend,Backend,这种情况有可能发生吗?我问这个问题是因为有人告诉我,你声明的函数可以在客户端被覆盖,所以他们想将函数及其功能移动到后端 在javascript中声明一个const函数(在javascript文件中)。在客户端使用该函数呈现页面(使用node.js/react.js/etc)。客户端是否可能覆盖客户端的函数,从而使您的web应用程序调用其他函数/将您重定向到某个不需要的目的地/url?是的。用户可以自由修改浏览器中运行的任何内容。您可以打开Chrome的开发工具,在页面上更改任何您想要的内容。当然

这种情况有可能发生吗?我问这个问题是因为有人告诉我,你声明的函数可以在客户端被覆盖,所以他们想将函数及其功能移动到后端


在javascript中声明一个const函数(在javascript文件中)。在客户端使用该函数呈现页面(使用node.js/react.js/etc)。客户端是否可能覆盖客户端的函数,从而使您的web应用程序调用其他函数/将您重定向到某个不需要的目的地/url?

是的。用户可以自由修改浏览器中运行的任何内容。您可以打开Chrome的开发工具,在页面上更改任何您想要的内容。当然,这只是在他们的浏览器中


应在服务器上验证在浏览器中完成的任何验证。JavaScript验证应仅为方便用户而进行。任何登录信息只能通过一种方式发送,即客户端->服务器。如果用户想要更改javascript生成的链接,那么这是他们的选择,如果他们真的愿意,他们可以更改服务器上生成的链接

您是否担心使用开发工具更改代码的人,或插入恶意脚本的人

很难保护自己不受那些使用开发人员工具潜入代码的人的影响,因为这些工具非常复杂。请记住,他们所做的更改仅代表他们应用,只要他们保持选项卡打开且不刷新页面即可。这不会对其他人造成危险。如果您不喜欢别人阅读您的代码,请在将其放到服务器上之前,先对其运行缩小和隐藏操作

如果您担心恶意代码,最好尽可能少地向全局命名空间公开。这是一个你可以采取的简单措施

此示例很容易被脚本覆盖:

var foo = 'bar';

function doSomething() {
    console.log(foo);
}

// evil script
doSomething = function () { 
   window.location = 'http://evil.com'
}
但通过将代码包装在IEFE中,您可以更难从外部覆盖您的功能:

(function() { // use an IEFE to wrap your code here
   var foo = 'bar';

   function doSomething() {
       console.log(foo);
   }
)();

// evil script
doSomething = function () {  // this function will not be called in your code
   window.location = 'http://evil.com'
}

对用户可以在客户端上执行任何他们想要的操作。这就是为什么您在任何地方都设置身份验证检查。您应该检查当前用户是否是有效用户,以及是否允许他做他正在做的事情。@SLaks-是的,他们可以,但我认为这有点过于简单化了。首先,他们只能在客户机上重写javascript——他们不能让你的应用程序调用其他函数或重定向到其他人不想要的目的地,除非你写了一些非常不安全的代码。