【发布时间】: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