2012-12-05 18 views
0

我建設,我在旅途中加載腳本的應用程序:Ajax + eval比script標籤更有害嗎?

var newScript=document.createElement("script"); 
newScript.src="script.js"; 
document.head.appendChild(newScript); 

的腳本是在同一個域,因此而不是使用腳本標記我使用AJAX + EVAL,因爲它給了我更多的靈活性考慮(特別是與其他腳本同步)。這兩個選項是否相同,或者在使用eval時是否還有其他風險?

+0

我看不到'eval',聽不到'eval'。 – Neal

+0

我投票重新提出這個問題。它在幾分鐘內收到了答覆,沒有任何「辯論,爭論,投票或擴大討論」。 – Christophe

回答

0

關於風險,兩者都是等價的。

這兩種方法都是盲目執行下載的腳本(不檢查)。唯一的區別是你不能使用ajax從其他域執行腳本。

在另一方面,通過evaling之前下載腳本爲文本,你必須在其上運行一些文字處理,如檢查已知的惡意攻擊,掉毛等它所以你可以在理論上,建立一個機會通過使用ajax + eval來保護和/或限制執行環境。但搞清楚什麼是惡意和什麼是良性的並不容易。

+0

thx!你碰巧知道jQuery getScript是否執行任何這樣的文本處理? – Christophe

+0

@Christophe:我不太瞭解jQuery內部的東西,恐怕我的猜測不會。一些早期的JSON解析器使用validate-then-eval技術,因爲它通常比手動爲大對象解析文本要快。當本機JSON方法/函數不可用時,一些JSON解析器仍然會回退到驗證 - 然後評估。 – slebetman

0

eval的唯一合法用途之一是當您的AJAX調用返回JavaScript時。雖然這確實給了額外的靈活性。我不確定您的特定應用程序,但這些是主要問題:

  • 用戶可以通過AJAX發送他們想要的任何數據。確保你的服務器端代碼是乾淨的。
  • AJAX腳本意味着瀏覽器無法緩存它們。這會導致用戶體驗變慢。
+0

'您提供的代碼實際上不會工作'代碼工作正常。這是使用JavaScript包含其他JavaScript文件的標準方式。 – slebetman

+0

@SomeKittens thx的答案。我肯定在談論通過ajax獲取script.js文件。有幾點我不太明白:1 /我的代碼應該運行腳本2/AJAXing腳本應該仍然允許緩存。 3 /我同意用戶可以通過AJAX發送他們想要的任何數據,但是腳本標籤中的文件也不是這樣嗎? (我特別感興趣的是澄清我的觀點3 /) – Christophe