TL; DR: 使用动态视图引擎(如Sinatra + ERB)动态生成带有自定义内容的javascript文件以嵌入第三方网站是否安全/明智?
具体而言,使用服务器端视图引擎将这些数据作为变量嵌入javascript页面是否安全/明智?
全文:
我的javascript / Sinatra应用程序功能有点像Google Analytics,因为合作伙伴网站包含我们的javascript文件,而且JS代码会将数据发送到我们的Sinatra应用程序。
我希望我们的客户能够轻松配置此javascript include,因为他们需要与我们的javascript代码进行通信,这是状态数据(例如他们的客户ID和当前登录的用户ID)。但是,在我们的脚本可以使用它之前,它们需要通信的数据必须通过我们的服务器端数据库进行转换。
我当前的方法感觉有点hacky: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包含?
另请注意,我已简化上述用例,以使问题更加清晰。