问题:当我让客户向其网页添加自定义JS脚本时,我应该采取哪些预防措施?
如果您想了解更多详情:
我正在为一家公司开发一个类似项目的自定义CMS,CMS拥有多个“群组”,每个订户“拥有”他们自己做的事情。
新要求是某些群体希望添加Google Analytics以了解他们的行为。所以我自然在表中添加了一个列并进行了代码调整,因此如果该列中有一些数据,我只需在母版页中使用以下行来设置脚本:
ScriptManager.RegisterClientScriptBlock(Page, typeof(Page), "CustomJs", CustomJs, true);
它的工作正常,只是,它让我思考......
对于从js
了解如何访问cookie等的人来说,这很容易。当然,每个小组都经过审核,只有超级管理员可以添加这个javascript,当然,他们不会愚蠢地破解他们自己的小组。 每个群组都有自己的代码,因此不可能破解其他群组 但仍然
我不习惯让用户添加自己的javascript代码。 我可以自己监控每个小组,但这些小组的成长非常快,而且我将无法再这样做了。
所以,简要介绍一下:我应该采取什么预防措施来避免任何意外?
ps:确实尝试谷歌,在任何地方都没有令人信服的答案。
答案 0 :(得分:5)
不是允许用户添加他们自己的Javascript文件,并且考虑到此处的唯一要求是谷歌分析,为什么不让他们将他们的分析ID放入CMS,如果它存在,输出相关的Google Analytics代码?
通过这种方式,您可以满足用户的要求,同时也避免了防范恶意脚本的需要。
答案 1 :(得分:3)
让用户使用Javascript一般来说,这是一个非常糟糕的主意。除非你必须这样做,否则不要这样做。
我遇到过一个问题,我需要让客户端使用Javascript,但是,客户端不一定是受信任的,因此,我修改了cofeescript,以便只有一小部分可以编译为javascript,而且效果非常好。这可能对你来说太过分了。
你不应该让你的用户访问cookie,这总是很痛苦。此外,如果您是HTML5用户之一,则没有localStorage或webSQL,并且没有document.write(),因为这是JSLint告诉您的另一种形式的eval
。
而且,让人们拥有javascript的问题在于,即使您认为自己拥有可信用户,也可能会有人获得密码,而您不希望该人访问该组中的所有其他帐户。
答案 2 :(得分:1)
自动识别某些JavaScript代码是恶意还是沙盒,这几乎是不可能的。如果您不想允许黑客攻击您的网站,只剩下几个选项:
答案 3 :(得分:1)
如果您别无选择,可以考虑分离用户javascripts(和cookie)的路径/域名。
例如,您的用户有页面: user1.server.com 并保持用户页面 user1.server.com
因此,如果您将会话cookie设置为user1.server.com,则会使其无法获取来自其他域(例如user2.server.com)的用户脚本。
另一个选项可能是在服务器JS引擎上执行所有用户的javascript(从而控制所有用户的I / O并限制对浏览器资源的访问)。
无论如何都没有简单易用的解决方案,所以最好考虑使用其他答案中的选项(例如预先设定的脚本API,人工检查)。