脚本标记中的JS对象是否安全?

时间:2016-11-02 22:17:59

标签: javascript html security ecmascript-6

我有一个这样的HTML,我从我的网络服务器

发送到客户端
<html>
<head>
    <script type="text/javascript">
        var myapp = myapp || {};
        myapp.settings = {"abc", "xyz", "123"};
    </script>
</head>
</html>

在我的客户端应用程序的其余部分中,我有查看myapp.settings对象的检查。

myapp.settings安全吗?黑客可以添加字符串或从myapp.settings中删除字符串吗?如果是这样,有什么示例方法可以做到这一点?

3 个答案:

答案 0 :(得分:4)

不,这不安全。

是的,用户可以很容易地操纵myapp.settings对象的状态。

答案 1 :(得分:4)

不,它不安全。事实上,网页中的任何内容都不是完全安全的。

在您的特定示例中,以下是有关如何操作myapp对象的一些示例:

  1. 最终用户可以打开浏览器控制台并输入一行代码来更改该对象。

  2. 最终用户可以打开浏览器调试器,设置断点,当它到达该断点时,编辑该对象。

  3. 最终用户可以下载或创建一个书签,点击该书签会修改myapp对象。

  4. 最终用户可以设置一个拦截传入页面的代理,对其进行修改然后将其发送到浏览器。

  5. 攻击者可以在前往您的路上拦截该页面并对其进行修改(例如,通过您的ISP)。注意:如果您使用https,这将不太可能。

  6. 由于浏览器中没有任何内容是完全安全的,因此必须考虑到特定需求来解决安全问题,然后探索选项以处理这些特定问题。

答案 2 :(得分:1)

只要有人可以在该应用中执行脚本,他们就可以修改myapp.settings。但是,您可以通过使用Object.freeze()函数来阻止这种情况:

Object.freeze(myapp.settings);
myapp.settings.test = 42;
console.log(myapp.settings.test); // undefined