我有一个Web应用程序。我正在使用Angularjs和Web Api2。
我有一个简单的表单,用户可以在其中插入一些自由文本,这些文本将通过电子邮件发送给其他人。文本也保存在数据库中,以后可以显示在网站页面中。我知道我不需要检查用户的输入,因为在 web api 中,文本会自动编码。所以我期望如果用户,例如,键入
<script type="..">...</script>
我在我的 Web api 控制器中收到服务器端的内容如下:
<script type="..">...</script>
我收到
<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)保存到数据库之前对其进行编码,这样您几乎不需要执行任何显示它们的操作,因为它们将显示为像这样的字符串<script type="..">...</script>
例如。
但是,如果您仍然想接受一些html标签,例如<p>
,<strong>
等...,则应保存输入而不对其进行编码并使用清理器显示它们:https://docs.angularjs.org/api/ng/directive/ngBindHtml