如何全局取消Angular 5绑定的内容

如何全局取消Angular 5绑定的内容,angular,rest,xss,Angular,Rest,Xss,tl;博士 是否可以更改angular的{{}绑定行为,使其不清理/转义值 完整问题 我们有一个相当大的angular 5应用程序,由json REST API支持。RESTAPI接口到一个更大的系统和数据库,这个系统和数据库已经建立了很多年。其他已建立的应用程序读取和写入数据,其中一个关键点是,来自所有应用程序的用户输入数据必须逐字存储在数据库中,因为其他应用程序(传统、非web应用程序)需要读取和写入数据 这意味着(尽管不需要)REST API支持POST和PUT,其主体如下: { "r

tl;博士
是否可以更改angular的
{{}
绑定行为,使其不清理/转义值

完整问题
我们有一个相当大的angular 5应用程序,由json REST API支持。RESTAPI接口到一个更大的系统和数据库,这个系统和数据库已经建立了很多年。其他已建立的应用程序读取和写入数据,其中一个关键点是,来自所有应用程序的用户输入数据必须逐字存储在数据库中,因为其他应用程序(传统、非web应用程序)需要读取和写入数据

这意味着(尽管不需要)REST API支持POST和PUT,其主体如下:

{
  "reportName" : "<a href=\"http://somewhere.bad\">My report</a>",
  "reportType" : "VEHICLE"
}
<div>{{report.reportName}}</div>
但现在,angular正在消毒/逃逸符号,因此在屏幕上呈现为:

&lt;a href=&quot;http://somewhere.bad&quot;&gt;My report&lt;/a&gt;
即,该约束有效地做到了:

<div>&amp;lt;a href=&amp;quot;http://somewhere.bad&amp;quot;&amp;gt;My report&amp;lt;/a&amp;gt;</div>
&;书信电报;a href=&;引用;http://somewhere.bad&引用&;燃气轮机;我的报告及;lt/a&;燃气轮机;
我认为我们需要的是angular信任响应中的数据并逐字呈现。也就是说,如果它是内插的而不是绑定的(同样,请原谅我的术语!),它将有效地做到这一点:

<div>&lt;a href=&quot;http://somewhere.bad&quot;&gt;My report&lt;/a&gt;</div>
a href=”http://somewhere.bad“我的报告/a
这将导致屏幕上的渲染

<a href="http://somewhere.bad">My report</a>

这没关系,因为这是目前的行为。它不会作为可单击或可执行的标记位添加到DOM中——它只是文本

是否有一种全局方法来告诉angular 5如何处理值得信任的值?当然,我们所面临的问题是,作为一个已经开发的应用程序,其大小合理,模板中可能有数千个
{{}
样式绑定,因此,我们不需要遍历并将该语法更改为其他语法(我曾看到人们使用
,或者使用
{report.reportName | safeHtml}之类的管道)
)我正在寻找更多的全球方法


有什么想法吗?

您必须使用管道,不能一次更改所有插值(
{…}}
)的行为。如果你这样做了,你将不得不改变框架本身。我更喜欢最初的方法。不在客户端上转义可能会导致其自身的漏洞。现在,客户端的安全性取决于服务器。如果客户端使用多个API或从一个API到另一个API的更改,则它们可能会混淆是否转义数据。服务器无法可靠地转义内容,因为要使用的正确转义取决于上下文。对于HTML上下文来说安全的东西对于JS或CSS上下文来说是不安全的。任何因此API而出现XSS问题的客户端都可能有自己的漏洞,而这些漏洞与此无关。
<div>&amp;lt;a href=&amp;quot;http://somewhere.bad&amp;quot;&amp;gt;My report&amp;lt;/a&amp;gt;</div>
<div>&lt;a href=&quot;http://somewhere.bad&quot;&gt;My report&lt;/a&gt;</div>
<a href="http://somewhere.bad">My report</a>