[英]How does angularjs prevent inline script tags from executing?
我很想知道AngularJS如何阻止內聯<script>
標簽在通過ng-include指令包含時執行。
在包含模板並檢查DOM之后,腳本標記肯定存在,但它們尚未執行。 他們是如何被解除武裝的?
我已經開始查看源代碼,但是我自己嘗試將腳本標記包含到DOM中的任何嘗試(appendChild,
innerHTML
,innerText,document.write等)總是導致它被執行。
謝謝。
這是jqLite實現方式的工件。
要使腳本標記有效,只需確保在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>
如果您更多地解釋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上的源代碼
然后jqLite的html函數使用element.innerHTML = value;
插入內容。 請參閱GitHub上的源代碼
經過測試 - 看起來就足以不執行<script>
標簽了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.