使用 AJAX 并设置 innerHTML 的安全性?

Security using AJAX and set innerHTML?

考虑以下情况:

承认 JS 固有的某种程度的不安全性,我刚刚所做的有多不安全?

OWASP XSS Cheat Sheet 表示要转义所有 'untrusted data'。鉴于上述情况,我的 AJAX 请求的结果是否不受信任? AJAX请求的结果是否被视为'untrusted'?

以这种方式插入 HTML 是不好的做法吗?如果是这样,我应该做什么呢?

编辑以澄清几件事:

只要响应是真正静态的并且不涉及任何类型的用户输入,就可以了。 AJAX 本身(正如您所暗示的)不会使其容易受到 XSS 攻击(只要传输是安全的,这实际上意味着 https)。

一个注意事项(不一定是您的情况,但一般情况下)可能是您认为用户输入是什么,什么不是。您的应用程序 总是 接收来自用户的输入,或者它可能使用之前接收到的参数,甚至是其他应用程序接收的参数。即使你不传递参数,也有请求headers、cookies(如果有的话),用户输入也可以从数据库中读取。即使它看起来像数据库中的静态数据,在某些时候它也可能源自某种用户,可能是合法(但流氓)用户,或外部攻击者,或者它可能来自另一个写入到的应用程序相同的数据库(无论如何都不是一个好习惯)。

所以简而言之,如果您发回的数据真的只是静态数据(如硬编码),那并不容易受到攻击,但有很多方法可以使它变成动态的,从那里它是您的(理想情况下基于风险) ) 决定,你要防范什么,你信任什么。

最佳做法是默认对所有内容进行编码以避免错误。如果您确定您信任要插入 DOM 的数据源为 HTML,那很好。威胁建模可能有助于发现您应该信任和不应该信任的内容,但在某些情况下,它也可能是显而易见的。