在让客户端向网页添加javascript之前,我应该采取哪些预防措施
What precautions should I take before I let client add javascript to a webpage?
问题:当我让客户端向其页面添加自定义JS脚本时,我应该采取什么预防措施
如果您想要更多详细信息:
我正在为一家公司做一个类似CMS的定制项目,CMS有许多"组",每个用户都"拥有"这些"组"做自己的事情。
新的要求是,一些团体希望添加谷歌分析,看看他们做得怎么样。所以我很自然地在表中添加了一列,并进行了代码调整,所以如果该列中有一些数据,我只需在主页面中使用以下行来设置脚本:
ScriptManager.RegisterClientScriptBlock(Page, typeof(Page), "CustomJs", CustomJs, true);
它工作得很好,只是,它让我思考。。。
对于熟悉如何从js
访问cookie等的人来说,这真的很容易。当然,每个小组都是有管理的,只有超级管理员才能添加这个javascript,当然,他们不会愚蠢到攻击自己的小组每个组都有自己的代码,因此不可能破解其他组但仍然
让用户添加自己的javascript代码,我真的很不舒服。我可以自己监控每个小组,但小组发展得很快,我将无法再这样做。
所以,简单地说:我应该采取什么预防措施来避免任何事故?
ps:确实试过谷歌,没有任何令人信服的答案。
与其允许用户添加自己的Javascript文件,而且这里唯一的要求是谷歌分析,为什么不让他们将分析ID放入CMS,如果存在,输出相关的谷歌分析代码?
通过这种方式,您既满足了用户的要求,又避免了对恶意脚本进行保护的需要。
让用户使用Javascript通常是一个非常糟糕的主意。除非迫不得已,否则不要这么做。
我曾经遇到过一个问题,我需要让客户端使用Javascript,但客户端不一定是可信的,所以,我修改了cofeescript,使得只有一小部分可以编译Javascript,而且效果很好。这对你来说可能太过分了。
你不应该让你的用户访问cookie,这总是很痛苦的。此外,如果你是HTML5用户,就不要使用localStorage或webSQL,也不要使用document.write(),因为这是JSLint告诉你的eval
的另一种形式。
而且,让人们拥有javascript的问题是,即使你相信你有值得信任的用户,也可能有人会得到密码,而你不希望那个人访问群中的所有其他帐户。
自动识别某些JavaScript代码是恶意的还是沙盒,这几乎是不可能的。如果你不想允许黑客入侵你的网站,你只有几个选择:
- 根本不允许用户添加JavaScript
- 仅允许预定义的JavaScript代码,例如Google Analytics
- 在允许在网站上显示所有自定义JavaScript之前,请让人员对其进行检查。永远不要相信从第三方网站加载的脚本——这些脚本可能会随着时间的推移而变化,并变成恶意的
如果您别无选择,可以考虑分离用户javascript(和cookie)的路径/域。
例如,您的用户有页面:user1.server.com并且您将用户页面保存在user1.server.com
因此,如果您将会话cookie设置为user1.server.com,则其他域(例如user2.server.com)的用户脚本将无法获取这些cookie。
另一种选择可能是在服务器JS引擎上执行所有用户的javascript(从而控制所有的I/O并限制对浏览器资源的访问)。
无论如何,没有简单易行的解决方案,所以最好考虑使用其他答案中的选项(例如,预先定义的脚本API、人工检查)。
- 我应该如何从xml文件构建一个javascript页面
- 我应该使用Ng提交还是点击表格
- 在Redux中,我应该在哪里编写复杂的异步流
- 我应该如何检查主干.主干.模型更改时查看
- 我应该先学习Angularjs还是Laravel
- 是否有任何可能的原因使我应该指定类型=“”;按钮“;用于我的按钮元素
- 在ES6 Promise中,我应该在解决/拒绝之前使用return吗
- 我应该将MVC视图特定的javascript文件放在哪个文件夹中
- 我应该始终删除EventListener吗
- 我应该如何衡量JS的单元测试覆盖率?我可以'我对jscoverage不满意
- 当一些事情可以通过JS或CSS完成时,我应该选择哪种方式
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 我应该如何声明我的自调用函数
- 我应该/如何清除mousemove JQuery事件侦听器
- 我应该如何在 UL 内触发 IMG 标签的点击
- 我应该返回一个类似console.log()的方法调用吗
- 我应该用K&编写javascript时的R样式
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 我应该怎么做才能将这个数组从随机更改为在页面刷新时按顺序显示
- 在让客户端向网页添加javascript之前,我应该采取哪些预防措施