angularjs 应用程序和网络 api 中的 XSS 2

XSS in angularjs app and web api 2

我有一个网络应用程序。我正在使用 Angularjs 和 Web Api2。

我有一个简单的表单,用户可以在其中插入一些免费文本,这些文本将通过电子邮件发送给其他人。文本也保存在数据库中,稍后可以显示在网站页面中。 我知道我不需要检查用户的输入,因为在 web api 中,文本是自动编码的。 所以我希望如果用户输入

<script type="..">...</script>

我在我的网络 api 控制器中接收服务器端,如下所示:

&lt;script type=&quot;..&quot;&gt;...&lt;/script&gt;

我收到了

<script type="..">...</script>

没有任何变化。

如何对输入进行编码以确保应用程序不会受到 XSS 攻击?我是否应该保持输入不变但在将其放入电子邮件时更改值? 当我将它保存在我的数据库中时?它应该以

的形式保存
<script type="..">...</script>

然后在页面显示的时候编码?

这一刻我刚把这个添加到我的 web.config

<httpRuntime ... encoderType="System.Web.Security.AntiXss.AntiXssEncoder,System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />

但似乎什么都没有改变。

谢谢

您有多种可能性,您可以在将收到的字符串数据 (https://github.com/mathiasbynens/he) 保存到数据库之前对它们进行编码,以这种方式您几乎不需要做任何显示它们的事情,因为它们会例如显示为这样的字符串 &lt;script type=&quot;..&quot;&gt;...&lt;/script&gt;

但是如果您仍然想接受一些 html 标签,例如 <p><strong> 等...您应该保存输入而不对其进行编码并使用消毒剂来显示他们:https://docs.angularjs.org/api/ng/directive/ngBindHtml