考虑以下情况:
接受JS中固有的某种程度的不安全感,我刚刚做了多么不安全的事情?
OWASP XSS Cheat Sheet表示要逃避所有“不受信任的数据”。鉴于上述情况,我的AJAX请求的结果是否不受信任?任何AJAX请求的结果都被视为“不可信”吗?
以这种方式插入HTML是不好的做法?如果是这样我应该做什么呢?
修改以澄清以下几点:
答案 0 :(得分:1)
只要响应是真正的静态且不涉及任何类型的用户输入,就可以了。 AJAX本身(正如您所暗示的)不会使其容易受到XSS的攻击(只要传输是安全的,这实际上意味着https)。
一个警告(不一定是你的情况,但一般来说)可能是你认为用户输入和不是。您的应用程序始终接收来自用户的输入,或者它可能使用先前接收的参数,甚至可能使用其他应用程序。即使您没有传递参数,也有请求标头,Cookie(如果有),也可以从数据库中读取用户输入。即使它看起来像数据库中的静态数据,在某些时候它可能源自某种类型的用户,可能是合法的(但是流氓的)或外部攻击者,或者它可能来自另一个写入的应用程序相同的数据库(无论如何都不是一个好的做法)。
简而言之,如果您发回的数据实际上只是静态数据(如硬编码的那样),那么它并不容易受到攻击,但它有很多种方式可以变为动态,并且从那里开始它就会变成动态的。你的(理想的基于风险的)决定,你保护的和你信任的。
最佳做法是默认编码所有内容以避免错误。如果您确信您信任要作为HTML插入DOM的数据源,那很好。威胁建模可能有助于发现您应该和不应该信任的内容,但在某些情况下,它也可能是显而易见的。