2017-07-13 30 views
0

这种情况有可能发生吗?我问这是因为有人告诉我,你声明的函数可以在客户端被覆盖,所以他们希望将函数和它的功能移动到后端...假设情况:前端替换功能

你声明一个JavaScript函数中的const函数)。在客户端使用该功能渲染页面(使用node.js/react.js/etc)。客户端是否有可能覆盖客户端的功能,从而使您的Web应用程序调用其他某个函数/将您重定向到某个不想要的目标/ URL?

+3

是;用户可以在客户端上做他们想做的任何事情。 – SLaks

+1

这就是为什么你在任何地方设置身份验证检查的原因。您应该检查当前用户是否是有效用户,以及他是否被允许执行他正在做的事情。 – hansTheFranz

+1

@SLaks - 是的,他们可以,但我认为这太简单了。首先,他们只能在客户端重写javascript - 他们不能让你的应用程序调用其他函数,或者重定向到其他任何人的不需要的目的地,除非你写了一些令人恐惧的不安全的代码。 –

回答

0

你是否担心开发者工具改变你的代码或者插入恶意脚本的人?

由于这些工具非常复杂,很难保护自己免受使用开发人员工具潜入代码中的人的影响。请记住,他们所做的更改只能代表他们进行应用,只要他们保持标签打开并不刷新页面即可。这不会对他人造成危险。如果您不喜欢人们阅读您的代码,请先将其放在服务器上,然后对其执行缩小和隐藏操作。

如果您担心恶意代码,尽可能少地暴露给全局名称空间总是一个好主意。这是一个你可以采取的简单措施。

这个例子可以通过脚本很容易覆盖:

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' 
} 
0

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

任何在浏览器中完成的验证都应该在服务器上进行验证。 JavaScript验证应仅为用户提供便利。任何登录信息都应该仅以单向方式发送,客户端 - >服务器。如果用户想要更改JavaScript生成的链接,那么这是他们的选择,如果他们真的想要,他们可以更改服务器上生成的链接。