0

我們與MVC(4,5)合作,我們的一些客戶要求我們將實施一些谷歌分析/ facebook像素代碼。 我們不擅長搜索引擎優化等,所以我們只是採取我們的客戶提供的JS代碼,我們在他們的網站上實施它(我們的主機(快速瀏覽和檢查代碼後))。從用戶輸入中獲取JS腳本塊的好習慣?

現在我們想要自動化流程,所以我們想創建一個CMS頁面,管理員(我們的客戶)可以發佈一個腳本塊(他自己的分析代碼)到我們的服務器上進行自動檢查和實施相關視圖(mvc .net)。

我想到了兩種不同的方式: 1.使用txt/js的文件上傳並解析它以使用HttpPostedFileBase和BinaryReader字符串。 2.從輸入表單獲取腳本作爲文本。

商業智慧,我們更願意方法2.但這似乎多了很多危險。 我將不得不繞過MVC的請求驗證,以便讓用戶傳遞給控制器​​「有潛在危險的代碼」。

有沒有辦法,我缺少另一種方式? 作爲從最終用戶獲取這種輸入的最佳實踐,哪些方面考慮? 我確信這已經完成。

這是我的方法#1代碼:

[HttpPost] 
public ActionResult AnalitycsCMS(HttpPostedFileBase scriptFile) 
{ 
    if (scriptFile != null && scriptFile.ContentLength > 0) 
    { 
     // Validate through List of valid extentions and type (strings) 
     bool isValidExtention = extentions.Any(item => scriptFile.FileName.EndsWith(item, StringComparison.OrdinalIgnoreCase)); 
     bool isValidType = types.Any(item => scriptFile.ContentType.EndsWith(item, StringComparison.OrdinalIgnoreCase)); 

     if (isValidExtention && isValidType) 
     { 
      // Read bytes from http input stream 
      BinaryReader br = new BinaryReader(scriptFile.InputStream); 
      byte[] data = br.ReadBytes(scriptFile.ContentLength); 

      string result = System.Text.Encoding.UTF8.GetString(data); 
      ViewBag.ScriptFile = result; 
     } 
    } 
    return View(); 
} 
+0

你看着使用類似[谷歌標籤管理器](https://www.google.com/analytics/tag-manager/)? – Stu

+0

@Stu關心地解釋一些關於它如何幫助我實現我的目標? –

+0

看起來您希望將特定代碼添加到DOM以運行跟蹤和標記(即Google Analytics或Facebook重新定位等)。如果是這樣,這就是GTM所做的,這意味着您不必提供內部解決方案。 – Stu

回答

0

我曾與一個CMS類似的問題我工作和客戶總是最後加入JS代碼,這將(100%),打破你的代碼,然後他們將針對您的系統提交錯誤報告。他們會添加會干擾你的庫的代碼庫,代碼片斷會直接干擾代碼,所以我強烈建議你避免這樣做。

如果你真的有,那麼我建議谷歌標籤管理中有人已經提到的意見或確保JS代碼添加到命名空間,並用別的東西來防止衝突的變量包裹。另外,在已加載庫的文本輸入區域附近添加一條消息,以便它們不會再次添加它們。