2014-10-08 33 views
0

tl; dr: 使用動態視圖引擎(如Sinatra + ERB)動態生成帶有用於嵌入第三方網站的自定義內容的JavaScript文件是否安全/明智?從第三方網站的腳本/包含標籤配置Javascript的最佳方式是什麼?

具體而言,使用服務器端視圖引擎將這些數據作爲變量嵌入JavaScript頁面是否安全/明智?

全文:

我的JavaScript/Sinatra的應用程序,其功能有點像谷歌分析,在合作伙伴的網站包含我們的JavaScript文件,以及JS代碼將數據發送到我們的末日應用程序。

我想讓我們的客戶很容易地配置這個JavaScript包含,因爲有狀態數據(如他們的客戶ID和當前登錄的用戶ID),他們需要與我們的JavaScript代碼進行通信。但是,它們需要進行通信的數據必須在我們的腳本可以使用之前通過我們的服務器端數據庫進行翻譯。

我目前的方法感覺有點不好意思: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調用來完成轉換,但是這使得我們腳本的安裝更加複雜,我們希望儘可能簡化他們的腳本(如果可能,一行腳本標籤)。

我可能會後悔上述策略,或者這似乎是一個合理的方法來管理動態第三方輸入/配置爲JavaScript包括?

請注意,我還簡化了上述用例,使問題更加清晰。

+0

沒人說,tldr; – allenhwkim 2014-10-08 00:41:56

+0

@allenhwkim tx。 tl; dr部分添加。 – 2014-10-08 02:20:23

回答

1

如果你properlyescape的值,它看起來很好。

也許Code Review的人有更多的提示。堆棧溢出適用於您的代碼無法按預期工作的情況。

+0

謝謝 - 關於將其移至Code Review的建議。 – 2015-03-24 16:36:31

相關問題