javascript - Angular 应用程序安全错误:清理不安全的样式值
问题描述
在我的角度应用程序中,最初,我使用bypassSecurityTrustStyle(value: string)
并且它工作但在我的应用程序的安全测试中,它给出了错误Angular Usage of Unsafe DOM Sanitizer
。
在这个博客中,它很好地解释了为什么不跳过清理以及如何手动清理值。但我无法弄清楚如何使用手动清理 CSS 样式SecurityContext.STYLE
错误:
警告:清理不安全的样式值 linear-gradient(135deg, rgba(0, 0, 0, 0.7) 100%, rgb(117, 79, 182) 100%)(参见 http://g.co/ng/security# ) _
安全网址不安全
getBgUrl(category: ICategory): SafeStyle {
console.log('safeUrl', this.sanitizer.sanitize(SecurityContext.STYLE, `linear-gradient(135deg, rgba(0, 0, 0, 0.7) 100%, rgb(117, 79, 182) 100%)`));
// return this.sanitizer.bypassSecurityTrustStyle(`linear-gradient(135deg, rgba(0, 0, 0, 0.7) 30%, ${this.gradientColors[category.id % 5]} 100%), url(${category.thumbnail})`);
}
<div class="explore-grid">
<mat-card
*ngFor="let category of categories"
[style.background-image]="getBgUrl(category)"
[routerLink]="['/Category',category.id]">
<span>{{category.name}}</span>
</mat-card>
</div>
解决方案
似乎是消毒剂的限制。根据消息来源,样式安全检查的正则表达式如下所示。
/^([-,."'%_!# a-zA-Z0-9]+|(?:(?:matrix|translate|scale|rotate|skew|perspective)(?:X|Y|3d)?|(?:rgb|hsl)a?|(?:repeating-)?(?:linear|radial)-gradient|(?:calc|attr))\([-0-9.%, #a-zA-Z]+\))$/g
我相信,它支持 linear-gradient() 或 rgba() 但不支持嵌套在另一个中。如果您真的需要这种透明度,也许#RRGGBBAA 符号会有所帮助?我用那个测试了你的例子,它有效。
推荐阅读
- android - 以编程方式导入 Room 数据库
- git - 依赖于 package.json 中分支的工作区包?
- c++ - 实现 QIODevice 驱动类
- android - 外观设计错误
- java - 如何在数组中生成随机双精度数?
- sql - 如何以 ASC 和 DESC 顺序对同一列进行排序而不重复
- css - 定位左/右切换/触发器和下拉菜单的相应菜单
- javascript - Flutter 和 Openlayers - 包括 Flutter 中的 js 库
- php - Symfony 4 @UniqueEntity 不适用于 GEDMO 树复合字段
- visual-studio - Visual Studio 构建事件/构建新版本的目标