我应该将 Json 从后端编码为 AngularJs 吗?
Should I encode my Json from backend to AngularJs?
我有一个带有 AngularJS 前端的 .NET 后端。
当用户输入他的名字
时,一切正常(没有执行 JavaScript)
<script>alert('xss');</script>
数据以 Json 的形式发送到我的后端未编码,我将输入的文本保存在数据库中,然后将文本以 Json 的形式未编码发送回前端数据已读取。
一切如前所述,但观看安全课程时,他们建议对 Json.
进行编码
就我而言,我是否应该更好地编码我的 Json?
这是Json保存和加载时的一部分:
,"aanvragernaam":"<script>alert('xss');</script>","
我认为您应该在向后端发送请求以将名称保存到数据库之前对 URI(name) 进行编码。
并且当你从后端接收数据时,你将使用decodeURI函数。
您可能想要进行输入验证并拒绝括号,因为名称很少包含这些。然而,这还不够安全控制,因为如果我们要支持其他类型的数据(例如评论),我们可能需要支持这些字符,因此我们的控制不起作用。
在 JSON 中使用 HTML(脚本标签等)的风险在于,如果攻击者可以某种方式诱使用户加载并在浏览器中将其显示为 HTML .这在 < IE9 中非常简单,因为那些浏览器不知道 Content-Type application/json 是什么。因此浏览器会尝试猜测(嗅探)内容。但是,可以使用 header X-Content-Type-Options: nosniff
.
禁用这种类型的嗅探
您可以通过添加
进一步加强保护
Content-Disposition: attachment;filename=data.json
X-Download-Options: NoOpen
如果用户尝试直接在浏览器中打开 JSON window,文件将被下载而不是显示。
恕我直言,JSON 中不需要编码。
只要你设置content-type为application/json
然后this content type will not be sniffed by browsers,因为它不是"known"。因此这对 XSS 应该是安全的。
不需要进一步编码。
JSON Hijacking is another vulnerability with GET requests, however it is not an issue in modern browsers.
我看到的唯一其他风险是 DOM XSS。只要您不将值 "as is" 写入 DOM,就没有 XSS 风险。如果是,那么你应该HTML对其进行编码,或者使用JQuery或JavaScript根据需要正确设置text
/textContent
,这样浏览器就不会将其解释为脚本。
请注意,这里的风险不是 <script>alert('xss')</script>
,它必须是 <img src=x onload="alert('xss');" />
这样的东西才能在动态添加到文档时执行。
我有一个带有 AngularJS 前端的 .NET 后端。 当用户输入他的名字
时,一切正常(没有执行 JavaScript)<script>alert('xss');</script>
数据以 Json 的形式发送到我的后端未编码,我将输入的文本保存在数据库中,然后将文本以 Json 的形式未编码发送回前端数据已读取。
一切如前所述,但观看安全课程时,他们建议对 Json.
进行编码就我而言,我是否应该更好地编码我的 Json?
这是Json保存和加载时的一部分:
,"aanvragernaam":"<script>alert('xss');</script>","
我认为您应该在向后端发送请求以将名称保存到数据库之前对 URI(name) 进行编码。
并且当你从后端接收数据时,你将使用decodeURI函数。
您可能想要进行输入验证并拒绝括号,因为名称很少包含这些。然而,这还不够安全控制,因为如果我们要支持其他类型的数据(例如评论),我们可能需要支持这些字符,因此我们的控制不起作用。
在 JSON 中使用 HTML(脚本标签等)的风险在于,如果攻击者可以某种方式诱使用户加载并在浏览器中将其显示为 HTML .这在 < IE9 中非常简单,因为那些浏览器不知道 Content-Type application/json 是什么。因此浏览器会尝试猜测(嗅探)内容。但是,可以使用 header X-Content-Type-Options: nosniff
.
您可以通过添加
进一步加强保护Content-Disposition: attachment;filename=data.json
X-Download-Options: NoOpen
如果用户尝试直接在浏览器中打开 JSON window,文件将被下载而不是显示。
恕我直言,JSON 中不需要编码。
只要你设置content-type为application/json
然后this content type will not be sniffed by browsers,因为它不是"known"。因此这对 XSS 应该是安全的。
不需要进一步编码。
JSON Hijacking is another vulnerability with GET requests, however it is not an issue in modern browsers.
我看到的唯一其他风险是 DOM XSS。只要您不将值 "as is" 写入 DOM,就没有 XSS 风险。如果是,那么你应该HTML对其进行编码,或者使用JQuery或JavaScript根据需要正确设置text
/textContent
,这样浏览器就不会将其解释为脚本。
请注意,这里的风险不是 <script>alert('xss')</script>
,它必须是 <img src=x onload="alert('xss');" />
这样的东西才能在动态添加到文档时执行。