在Angular 5中使用[innerHTML]是否安全?

aha*_*t91 8 innerhtml angular

我看到有相互矛盾的报道,说在Angular2 +中使用[innerHTML]标记很危险。现在还是这样吗?还是已经解决?

例如,此代码很危险:

<div [innerHTML]="post.body"></div>
Run Code Online (Sandbox Code Playgroud)

Gui*_*ère 10

我确定。

我只是尝试了以下 <div [innerHTML]="<span (touch)=() => {alert('Code has been successfully executed on client from external malicious input');}">test xss</span>"></div>

没有执行任何操作,DOM 检查显示 (touch) 已通过 angular 从跨度中移除。都很好 ;-)

  • 即使你绕过消毒也行不通。 (2认同)

Sey*_*han 7

就像它在这里所说的那样(在角度站点中),它似乎没有任何担心,因为角度可以自动识别不安全的值并对其进行消毒。

这是那里写的:

插值内容始终被转义-HTML不会被解释,浏览器在元素的文本内容中显示尖括号。

对于要解释的HTML,将其绑定到HTML属性,例如innerHTML。但是,将攻击者可能控制的值绑定到innerHTML中通常会导致XSS漏洞。例如,<script>执行标签中包含的代码:

export class InnerHtmlBindingComponent { // For example, a user/attacker-controlled value from a URL. htmlSnippet = 'Template <script>alert("0wned")</script> <b>Syntax</b>'; }

Angular将值识别为不安全并自动清除它,这会删除<script>标签,但会保留安全内容,例如<script>标签和<b>元素的文本内容。

所以我认为是的,这很安全。