【问题标题】:What precautions should I take before I let client add javascript to a webpage?在让客户端将 javascript 添加到网页之前,我应该采取哪些预防措施?
【发布时间】:2011-06-29 10:33:11
【问题描述】:

问题:当我让客户将自定义 JS 脚本添加到他们的页面时,我应该采取哪些预防措施?

如果您想了解更多详情:

我正在为一家公司开发一个类似 CMS 的自定义项目,该 CMS 有多个“组”,每个订阅者“拥有”他们自己做事的地方。

新的要求是一些小组想要添加谷歌分析来看看他们的表现如何。所以我很自然地在表格中添加了一列并进行了代码调整,因此如果该列中有一些数据,我只需使用母版页中的以下行来设置脚本:

ScriptManager.RegisterClientScriptBlock(Page, typeof(Page), "CustomJs", CustomJs, true);

它工作得很好,只是,它让我思考......

对于熟悉如何从js 访问 cookie 等的人来说,这真的很容易。当然,每个组都经过审核,只有超级管理员才能添加此 javascript,当然,他们不会傻到破解自己的组。 每个组都有自己的代码,因此不可能破解其他组 但仍然

我不太愿意让用户添加自己的 javascript 代码。 我可以自己监控每个组,但是这些组的增长速度非常快,我会遇到一个无法再做到这一点的时候。

所以,简而言之:我应该采取哪些预防措施来避免任何意外?

ps:确实尝试过google,没有任何令人信服的答案。

【问题讨论】:

    标签: javascript asp.net c#-4.0


    【解决方案1】:

    与其允许用户添加他们自己的 Javascript 文件,而且鉴于这里唯一的要求是谷歌分析,为什么不让他们将他们的分析 ID 放入 CMS 中,如果存在,输出相关的谷歌分析代码?

    这样您既可以满足用户的要求,又可以避免防范恶意脚本。

    【讨论】:

    • 正要说这个。如果您曾经使用过 Google 代码、Chrome 网上应用店等,几乎普遍而言,这就是 Google 在其自己的用户可编辑内容上执行此操作的方式。Google Analytics ID 的正则表达式也非常简单。
    • 这是一个非常好的主意。虽然现在的需求只是分析,但将来可能会更改为包含他们自己的自定义脚本,比如,我不知道,一些小部件或站点计数器等。但是,当这种情况出现时,您认为最好处理吗?
    • 是的。处理当前必须解决的问题。关注可能会或可能不会出现的问题是减缓开发速度的可靠方法。
    • 这不是一个好主意。这就像说,走路时集中注意力向下看,这是你必须处理的,这很好,直到你撞到墙。
    • 很高兴知道可能会发生什么,但是开发世界中最大的放缓之一就是过度开发。我们不需要在每一种情况下都迎合每一种可能性。我们需要做的是为人们提供价值。太多的项目因为耗时太长或范围失控而被废弃。专注于提供价值高于一切,并在价值与您将要实现的功能之间找到平衡。
    【解决方案2】:

    让用户使用 Javascript 通常是一个非常糟糕的主意。除非迫不得已,否则不要这样做。

    我曾经遇到一个问题,需要让客户端使用 Javascript,但是,客户端不一定是受信任的,所以我修改了 cofeescript,以便只有一小部分可以编译为 javascript,并且效果很好。这对你来说可能太过分了。

    您不应该让您的用户访问 cookie,这总是很痛苦。此外,如果您是 HTML5 人员之一,则不要使用 localStorage 或 webSQL,并且不要使用 document.write(),因为这是 JSLint 告诉您的 eval 的另一种形式。

    而且,让人们拥有 javascript 的问题在于,即使您认为自己拥有受信任的用户,也可能会有人获得密码,而您不希望该人访问组中的所有其他帐户。

    【讨论】:

    • 哦,我没有想到密码,密码可能放错了,因为很多团体都是老年人的慈善团体,我们都知道他们是如何写下密码的(不,我们有人在丢失密码表后给我们打电话;要求重置)
    • 如果您有未受保护的 javascript,不受信任的用户可以窃取 cookie。这将是 XSS 的天堂。
    【解决方案3】:

    自动识别某些 JavaScript 代码是恶意代码还是沙盒几乎是不可能的。如果您不想让黑客入侵您的网站,那么您只有几个选择:

    1. 根本不允许用户添加 JavaScript。
    2. 只允许预定义的 JavaScript 代码,例如用于 Google Analytics。
    3. 在允许显示在网站上之前,让人工检查所有自定义 JavaScript。永远不要相信从第三方网站加载的脚本 - 这些脚本可能会一天天变化并变成恶意。

    【讨论】:

    • 一般建议,谢谢;但是现在我们有大约60个组,并且有了新的营销团队,我们预计到明年(4月)将达到1000个然后(1)让用户添加js(2)手动维护每个组将是灾难性的。解决方案?
    • @iamserious:那么解决方案 2,只允许他们选择预定义的 JavaScript 代码。
    • 弗拉基米尔你会怎么做?
    • @Dhaivat:Jamie Dixon 已经解释过,对于 Google Analytics,没有必要重复。
    【解决方案4】:

    如果您别无选择,您可以考虑分离用户 javascript(和 cookie)的路径/域。

    例如,您的用户有页面: user1.server.com 并且您将用户页面保留在 user1.server.com

    因此,如果您将会话 cookie 设置为 user1.server.com,它将使来自其他域(例如 user2.server.com)的用户脚本无法获取它们。

    另一种选择可能是在服务器 JS 引擎上执行所有用户的 javascript(从而控制它的所有 I/O 并限制对浏览器资源的访问)。

    无论如何都没有简单易行的解决方案,因此最好考虑使用其他答案中的选项(例如预定义脚本 API、人工检查)。

    【讨论】:

    • 嗨,我们确实有group1.domain.comgroup2.domain.com 等我并不十分担心跨组黑客(因为它几乎不可能只使用 js)但同样的,有人可以决定一个“聪明的驴子”,并试图窃取他们组用户的 cookie。我的会话在服务器上,再次无法获取密码,但是有了 cookie,他们可以劫持会话并暂时使用它。
    猜你喜欢
    • 2020-02-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2023-03-29
    • 2010-09-21
    相关资源
    最近更新 更多