# 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的,可以选择丢弃。