簡體   English   中英

angularjs如何阻止內聯腳本標記執行?

[英]How does angularjs prevent inline script tags from executing?

我很想知道AngularJS如何阻止內聯<script>標簽在通過ng-include指令包含時執行。

在包含模板並檢查DOM之后,腳本標記肯定存在,但它們尚未執行。 他們是如何被解除武裝的?

我已經開始查看源代碼,但是我自己嘗試將腳本標記包含到DOM中的任何嘗試(appendChild, innerHTML ,innerText,document.write等)總是導致它被執行。

謝謝。

這是jqLit​​e實現方式的工件。

要使腳本標記有效,只需確保在angular.js文件之前加載jQuery庫。

  <head>
    <script src="//unpkg.com/jquery"></script>
    <script src="//unpkg.com/angular/angular.js"></script>
    <link rel="stylesheet" href="style.css">
    <script src="script.js"></script>
  </head>

PLNKR上DEMO


如果您更多地解釋innerHTML足以阻止腳本標記執行,我將選擇您的答案為正確

HTML5指定不應執行使用innerHTML插入的<script>標記

但是,有一些方法可以在不使用<script>元素的情況下執行JavaScript,因此每當使用innerHTML設置無法控制的字符串時,仍然存在安全風險。 例如:

const name = "<img src='x' onerror='alert(1)'>";
el.innerHTML = name; // shows the alert

因此,建議您在插入純文本時不要使用innerHTML ; 相反,使用Node.textContent 這不會將傳遞的內容解析為HTML,而是將其作為原始文本插入。

有關更多信息,請參閱MDN Web API參考 - Element.innerHTML

它看起來像ng-include調用$element.html(ctrl.template); 請參閱GitHub上的源代碼

然后jqLit​​e的html函數使用element.innerHTML = value; 插入內容。 請參閱GitHub上的源代碼

經過測試 - 看起來就足以不執行<script>標簽了。

我在這里創建了一個jsFiddle。 - #3相當於AngularJS正在做的事情,它不執行腳本標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM