XSS 攻击
xss 全称是 Cross Site Scripting(跨站脚本), 为了和 css 区分,故叫 xss
xss 攻击是指浏览器执行恶意脚本,从而拿到用户的信息进行操作
这些操作一般可以完成下面这些事情
- 窃取用户 cookie
- 监听用户行为,比如输入账号密码后发送到黑客服务器
- 修改 Dom 伪造登录表单
- 在页面生成浮窗广告
xss 攻击有三种方式
存储型
存储型的 xss 将脚本存储到了服务端的数据库,然后再客户端执行这些脚本,从而达到攻击的效果
常见的场景是留言评论区提交一段代码,如果前后端没有做好转义的工作,那评论存到了数据库,在页面渲染过程中直接执行,相当于执行 一段 js 代码
反射型
反射型 xss 指的是恶意脚本作为网络请求一部分,比如
bashhttp://baidu.com?q=<script>alert('1')</script>这样服务端会拿到 q 参数,然后将内容返回浏览器端,浏览器将这些内容作为 html 的一部分解析.发现是一个脚本直接执行
文档型
文档型的 xss 不会经过服务器,而是作为中间人的角色,在数据传输过程中劫持到网络数据包,然后修改里面 html 文档,这样劫持方式 包括 wifi 路由劫持或者本地恶意软件劫持等
防范方法:
主旨:防止攻击者提交恶意代码,防止浏览器执行恶意代码
对数据进行严格的输入编码:
- html 元素的编码、js 编码、css 编码、url 编码等;
- 避免拼接 html,eg:Vue/React 技术栈,避免使用 v-html/dangerouslyHtml
CSP:http header,即 Content-Security-Policy,旧浏览器可以设置 X-XSS-Protection
- default-src 'self':所有内容均来⾃站点的同⼀个源(不包括其⼦域名)
- default-src 'self': *.trusted.com:允许内容来⾃信任的域名及其⼦域名 (域名不必须与 CSP 设置所在的域名相同)
- default-src https://baidu.com:该服务器仅允许通过HTTPS⽅式并仅从lubai.com域名来访问⽂档
输入验证:phone,url,电话号码,邮箱做校验判断
开启浏览器的 XSS 防御:http only Cookie,禁止 js 读取 cookie 值,完成 xss 注入也无法窃取 cookie,eg:set-cookie,httponly
验证码