# XSS防御

# HttpOnly

HttpOnly不是为了对抗XSS,而是为了保护即使遭受了XSS攻击也无法拿到cookie。

# 输入检查

# 格式检查

必须在前端和后端都做检查。前端检查可以减少后端的压力,后端检查可以避免攻击者绕过前端进行攻击。

# 语境

输入检查要注意语境:

有些时候对输入进行检查时,只会转义部分特殊字符:

<script :src="var"></script>

其中 “$var” 是用户的输入,如果用户输入的是一个url(通常被认为是安全的)则不会被转义,这样就有可能导致恶意代码的加载。这个时候输出时可以对该变量进行白名单检测。

有时候对服务端对输入进行转义,前端做展示时有可能并不是用户希望看到的:

nickname = '\"天才\"'
<div>{{ nickname }}</div>

# 输出检查

# 富文本输入

注意使用v-html,可以对标签进行白名单限制。

对于标签属性,也必须做一些处理,例如:

<img src="..." onerror='alert(1)'>

可以选择只保留src属性,丢弃事件属性。

对于src属性,也必须检测其链接的scheme,例如:

<a href=javascript:alert(1)>

如果scheme不会http的,可以选择丢弃。