javascript - angularjs如何防止内联脚本标签执行?
问题描述
我很想知道<script>
当通过ng-include指令包含内联标签时,AngularJS 如何防止内联标签执行。
包含模板并检查 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>
PLNKR 上的演示。
如果您进一步解释 innerHTML 足以阻止脚本标签执行,我将选择您的答案为正确
HTML5 指定不应执行<script>
插入的标记。innerHTML
但是,有一些方法可以在不使用元素的情况下执行 JavaScript ,因此当您使用设置无法控制的字符串<script>
时仍然存在安全风险。innerHTML
例如:
const name = "<img src='x' onerror='alert(1)'>";
el.innerHTML = name; // shows the alert
因此,建议您innerHTML
在插入纯文本时不要使用;相反,使用Node.textContent
. 这不会将传递的内容解析为 HTML,而是将其作为原始文本插入。
有关更多信息,请参阅MDN Web API 参考 - Element.innerHTML。
推荐阅读
- cypress - 使用 cy.request() 登录会导致 400: Bad Request 错误
- node.js - 如何仅在 Nodejs 中编写与 app.get('/') 相同的功能
- sapui5 - 如何使用 valuehelp 在智能字段中显示名称或描述?
- javascript - 数字仪表板 - 永久运行多个 setInterval
- node.js - 运行 node.js 文件时的 module_not_found
- reactjs - 正确键入函数对象参数 TypeScript
- ruby-on-rails - 使用 route_translator gem 在 Rails 中的 minitest 问题
- json - 如果键具有动态值,如何使用 jq 过滤 json
- r - 将返回数据框的函数应用于数据框中的每一行
- php - 在 WooCommerce 中设置价格和最小订单数量