tl;博士: 使用动态 View 引擎(例如 Sinatra+ERB)动态生成带有自定义内容的 JavaScript 文件以嵌入第三方网站是否安全/明智?
具体来说,使用服务器端 View 引擎将这些数据作为变量嵌入到 JavaScript 页面上是否安全/明智?
全文:
我有一个 javascript/Sinatra 应用程序,其功能有点像 Google Analytics,合作伙伴网站包含我们的 javascript 文件,并且 JS 代码将数据发送到我们的 Sinatra 应用程序。
我想让我们的客户能够轻松配置此 javascript 包含内容,因为他们需要与我们的 javascript 代码通信的状态数据(例如他们的客户 ID 和当前登录的用户 ID)。但是,它们需要通信的数据必须通过我们的服务器端数据库进行转换,然后我们的脚本才能使用它。
我当前的方法感觉有点老套:Sinatra 将动态 javascript 文件作为“ View ”。客户端包含带有脚本标记的文件,例如:
<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 动态第三方输入/配置的合理方法吗?
另请注意,我简化了上面的用例以使问题更加清晰。
最佳答案
如果您 properly escape 值,对我来说看起来不错。
也许 Code Review 的人有更多提示。堆栈溢出是在您的代码无法按预期工作时出现的。
关于javascript - 从第三方网站的 script/include 标签配置 Javascript 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26247384/