我应该将我的Json从后端编码为AngularJs吗?

时间:2016-06-22 07:43:19

标签: angularjs json security xss

我有一个带有AngularJS前端的.NET后端。 当用户输入他的名字

时,一切正常(没有执行JavaScript)
<script>alert('xss');</script>

数据作为Json发送到我的后端未编码,我保存在数据库中输入的文本,然后发送文本,如Json,在读取数据时未编码回到前端。

这一切都如上所述,但是看着他们建议对Json进行编码的安全课程。

在我的情况下,我应该更好地编码我的Json吗?

这是保存和加载时Json的一部分:

,"aanvragernaam":"<script>alert('xss');</script>","

3 个答案:

答案 0 :(得分:1)

您可能希望进行输入验证并拒绝括号,因为名称很少包含这些。然而,这不是一个足够的安全控制,好像我们想要支持其他类型的数据(例如评论),我们可能需要支持这些字符,因此我们的控制不起作用。

在JSON中使用HTML(脚本标记等)的风险是,攻击者可以以某种方式欺骗用户加载并在浏览器中将其显示为HTML。这曾经是非常简单的&lt; IE9作为那些浏览器不知道Content-Type应用程序/ json是什么。因此,浏览器会尝试猜测(嗅探)内容。但是,可以使用标题X-Content-Type-Options: nosniff禁用此类型的嗅探。

您可以通过添加

进一步加强保护
Content-Disposition: attachment;filename=data.json
X-Download-Options: NoOpen

如果用户尝试直接在浏览器窗口中打开JSON,则将下载该文件而不是显示该文件。

恕我直言,JSON中无需编码。

答案 1 :(得分:1)

只要您将内容类型设置为application/json然后this content type will not be sniffed by browsers,因为它不是&#34;已知&#34;。因此,这应该对XSS安全。

无需进一步编码。

JSON Hijacking是GET请求的另一个漏洞,但它是not an issue in modern browsers

我看到的唯一其他风险是DOM XSS。只要你没有写出价值&#34;就像#34;进入DOM,然后没有XSS风险。如果您是,那么您应该对其进行HTML编码,或者使用JQuery或JavaScript根据需要正确设置text / textContent,以便浏览器不会将其解释为脚本。

请注意,此处的风险不是<script>alert('xss')</script>,它必须与<img src=x onload="alert('xss');" />类似,才能在动态添加到文档时执行。

答案 2 :(得分:0)

我认为在向后端发送请求以将名称保存到数据库之前,您应该使用encodeURI(name)。

当您从后端接收数据时,您将使用decodeURI功能。