【问题标题】:What is the best way to configure Javascript from third-party site's script/include tag?从第三方网站的脚本/包含标签配置 Javascript 的最佳方法是什么?
【发布时间】:2014-12-02 13:14:26
【问题描述】:

tl;博士: 使用动态视图引擎(例如 Sinatra+ERB)动态生成带有自定义内容的 javascript 文件以嵌入到第三方网站上是否安全/明智?

具体来说,使用服务器端视图引擎将这些数据作为变量嵌入到 javascript 页面上是否安全/明智?

全文:

我的 javascript/Sinatra 应用程序的功能有点像 Google Analytics,合作伙伴网站包含我们的 javascript 文件,并且 JS 代码将数据发送到我们的 Sinatra 应用程序。

我想让我们的客户轻松配置此 javascript 包含,因为他们需要与我们的 javascript 代码通信的状态数据(例如他们的客户 ID 和当前登录的用户 ID)。但是,它们需要通信的数据必须先通过我们的服务器端数据库进行转换,然后我们的脚本才能使用它。

我当前的方法感觉有点笨拙:Sinatra 将动态 javascript 文件作为“视图”提供。客户端包含带有脚本标记的文件,例如:

<script src="/dynamic-js/include.js?client_key=xyz&user_key=abc">

在 Sinatra 方面,它获取这些参数,使用数据库将它们转换为内部值,然后使用如下代码提供动态 (erb) javascript 文件:

window.ourInternalVars = {};
window.ourInternalVars.client_int_key="<%=client_int_key%>";
window.ourInternalVars.user_int_key="<%=user_int_key%>";

我的问题是,这是否是一个“糟糕”的解决方案(可能会产生不良和/或意外的结果)和/或是否有“更好”的方法(广泛使用的方法、使用现有库的方法或遵循社区/行业最佳实践)解决这个问题?

我显然可以使用静态 javascript 文件来解决这个问题,该文件读取自己的 URL 参数并进行 ajax 调用来配置自身,但速度较慢(脚本开始时数据不存在),因此不太有用我们的目的(它也不太可靠)。

我们也可以要求我们的客户对我们的服务器进行 ajax/api 调用以进行转换,但这会使我们的脚本的安装对他们来说更加复杂,我们希望对他们来说尽可能简单(a如果可能,使用一行脚本标签)。

我以后是否会后悔上述策略,或者这似乎是管理 javascript 包含的动态第三方输入/配置的合理方法?

请注意,我已经简化了上面的用例以使问题更清楚。

【问题讨论】:

  • 没人说过,tldr;
  • @allenhwkim TX。 tl;dr 部分已添加。

标签: javascript ruby dynamic sinatra


【解决方案1】:

如果你properlyescape 的值,我觉得很好。

也许Code Review 的人有更多提示。 Stack Overflow 适用于您的代码无法按预期工作的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多