Security Angular 2:清理HTML剥离了一些具有div id的内容-这是bug还是特性?

Security Angular 2:清理HTML剥离了一些具有div id的内容-这是bug还是特性?,security,angular,warnings,html-sanitizing,Security,Angular,Warnings,Html Sanitizing,我使用将未缩放的HTML传递到我的模板,当我传递到带有属性id的主体

我使用
将未缩放的HTML传递到我的模板,当我传递到带有属性
id
主体
时,角度抛出:

警告:清理HTML删除了某些内容(请参阅)。 警告:清理HTML删除了某些内容(请参阅)。 警告:清理HTML删除了某些内容(请参阅)


那它为什么这么说呢?在
div
中什么可能是危险的
id
?这可能是一个错误吗?

这是因为id属性不安全

这不是我的答案,但它会回答你的问题:


对于
id
name
,这些属性经常用作DOM中的参考点

如果攻击者可以欺骗这些参考点,则可能会欺骗现有脚本从非设计的位置获取和设置值,这可能很危险,具体取决于所使用的上下文


我注意到:他的文章的其余部分谈到了name属性,但是如果你还不了解上面的内容,你就会明白这一切背后的想法


这也适用于HTML表单,其中
name
用于标识名称/值对。例如,如果网站在输出特定表单字段时未对其进行编码,但由于表单字段是服务器生成的,并且表单通过使用令牌受到CSRF的保护,因此无法通过正常方式进行利用。但是,攻击者可能会利用
name
中使用的参数诱使用户访问URL,该参数包含提交表单时要执行的XSS负载

e、 g.正常使用:

https://example.com/product?item_name=watch&qty=1
它呈现一个窗体


然后以

Thank you for buying from Bob's Supplies.
Thank you for buying from <script>alert('xss')</script>.
但是,攻击者可以向用户发送链接,如下所示:

https://example.com/product?item_name=shop_name&qty=<script>alert('xss')</script>
https://example.com/product?item_name=shop_name&qty=alert('xss')
由于应用程序此时正确地进行了HTML编码,因此它将表单呈现为

<form>

<input type="hidden" name="shop_name" value="&lt;script&gt;alert(&#039;xss&#039;)&lt;/script&gt;" />
<input type="hidden" name="shop_name" value="Bob's Supplies" />
<input type="hidden" name="anti-csrf" value="asdjasodhoai" />

<input type="submit" value="Click here to buy" />

</form>

然后将其输出为

Thank you for buying from Bob's Supplies.
Thank you for buying from <script>alert('xss')</script>.
感谢您从alert('xss')购买。

因为此页面不使用HTML编码
shop_name
参数,因为它是可信的,并且应用程序框架在重复的情况下总是取第一个值。非常做作,但这是我脑子里第一件要证明这一点的事情。

简单的解决方案是编写类似管道的代码

import { Pipe, PipeTransform } from "@angular/core";
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';

@Pipe({
  name: 'sanitizeHtml'
})
export class SanitizeHtmlPipe implements PipeTransform {

  constructor(private _sanitizer:DomSanitizer) {
  }

  transform(v:string):SafeHtml {
    return this._sanitizer.bypassSecurityTrustHtml(v);
  }
}
在html文件中添加类似于桩的内容

  <td *ngIf="i>0" [innerHTML]="entry.attributes[i] | sanitizeHtml"></td>


您也可以使用库。由于DomPurify,它可以更好地清理您的内容,并使用angular default sanitizer解决您的所有问题。

以及Karl对此问题的回答:使用Sanitizer@sanyooh这在SANATING中效果很好,但我的
[innerHTML]前面经常会显示
未定义的
显示内容<代码>
SafeHtml?在编写管道时,不要忘记导入DomSanitizer和SafeHtml<代码>从“@angular/platform browser”导入{domsanizer,SafeHtml}
我在我的
home.ts
home.html
中添加了上述代码,但它显示
模板解析错误:无法找到管道“sanitizeHtml”(“
我需要做什么?另请参阅