Angular安全性的最佳实践
太阳不知不觉地春天来了。
而且,不知为何头重脚轻,眼睛也痒的季节…对了,花粉。
虽然这个季节似乎是开始做些什么的好时机,
原本计划从一月开始的编程训练营却被取消了…
感到遗憾,同时也有些激动的情绪…
这次是我们主动过去的。
虽然有许多框架可供选择,但此次我们重点关注Angular编码的安全措施。无论涉及Angular与否,对于防御跨站脚本攻击(XSS)和项目扫描等基础知识都很有帮助。
Angular安全性的最佳实践
Liran Tal(利兰·塔尔)Natalia Venditto(娜塔莉亚·文迪托)
2020年8月10日
上次我们介绍了AngularJS安全性基础知识的备忘单。这次我们将介绍最新的Angular安全性最佳实践。
您可以从这里下载有关Angular安全性最佳实践的备忘单。
Angular安全最佳实践6
1. 以「Angular Way」來保護免受XSS攻擊
2. 注意使用innerHTML屬性
3. 不要使用連結使用者輸入來生成模板
4. 不要使用原生DOM API操作HTML元素
5. 不要在伺服器端模板中使用模板引擎
6. 掃描Angular專案,尋找可能帶來安全弱點的組件
使用「Angular Way」来防止XSS攻击
Angular安全实践#1:使用插值({{}})将潜在危险字符安全编码,并对不可信的HTML或CSS表达式进行转义。
Angular与React和Vue.js一样,在处理浏览器中的字符串插值的方法时采用了安全性优先的方法。默认情况下,所有数据都被视为不安全且不可信任的。因此,这些库和其他最新的视图库都遵循了将默认输出编码应用于HTML上下文中的所有文本的最佳实践。
我之前的博客文章详细介绍了AngularJS安全性的最佳实践,但为了将Web应用程序暴露于危险之中,并避免将Web应用程序暴露于跨站脚本(XSS)漏洞的恶意用户输入,强烈推荐使用内置花括号字符串插值的“Angular Way”。
2. 小心使用 innerHTML。
Angular安全最佳实践#2: 如果需要动态地将HTML添加到组件中,你需要将其生成绑定到[innerHTML],这样数据将被解释为HTML并进行净化,以防止恶意跨站脚本代码的执行。请注意,净化和编码不是相同的概念。
消毒和输出编码的区别是什么?
在输出编码中,字符串将被替换为可以映射到特定HTML标签的文本表示。例如,如果输入解析为脚本等,Angular可以选择编码特殊的角括号标记,这是实现安全最佳实践的其他许多库和框架的标准,并显示该文本。为此,进行了称为HTML实体编码的映射,并将下一个文本:script编写到DOM中。然后,浏览器解释上下文并输出script标签。
对于消毒和过滤,与输出编码不同,更积极的方法是检测并从写入到DOM的文本中删除不安全的字符,这一点受到了高度赞赏。上下文是决定输出编码和消毒的决定因素,并直接影响以正确执行行动的方式。
请参考Angular文档,了解关于安全性方面的详细内容。
Angular中定义了以下安全上下文:
* HTML用于在将值解释为HTML时使用,例如在绑定到innerHtml时。
* Style用于在绑定到style属性时使用CSS。
* URL用于在URL属性(比如““)中使用。
* 资源URL是用于加载和执行代码的URL,例如存在于“