xss攻击
- cross site scripting: 跨站脚本攻击
- 作用:获取页面数据 获取cookies 劫持前端逻辑 发送请求 偷取网站任意数据 偷取用户资料 偷取用户密码和登录状态 欺骗用户 获取用户银行卡信息等等
- xss注入节点
- html节点
- html属性
- javascript代码(url 搜索框 评论)
- 富文本
防御方案
-
浏览器自带防御:防御html内容跟html属性
-
将尖括号转义:>: ‘>’ <: ‘<’
-
将双引号 单引号转义
-
将空格转义 将&符号转义 将\转义
-
将输入内容用 json.stringify()转义
-
按白名单保留部分标签和属性
-
将外链比如href src url 里面可能存在的xss攻击替换 :
html.replace(/\<\s*\/?script\s*>/g, ''); html.replace(/javascript:[^'"]*/g, ''); html.replace(/onerror\s*=\s*[^'"]?[^'"]*['"]?/g, '');
-
github:根据白名单列表过滤html标签属性:xss第三方包
CSRF
- cross site request forgy:跨站请求伪造
- 其他网站对目标网站发请求
- 表单form target属性如果跟iframe一样,不会跳转界面
csrf危害
- 利用用户登录态
- 用户不知情
- 完成业务请求
- 盗取用户资金
- 冒充用户发帖
- 损害网站声誉
- 。。。
#### csrf防御
- same site属性
- 阻止第三方网站携带cookies
- 在前端界面加入验证信息
- token
- cookie session
- 验证码: ccap第三方插件
- referer: ?获取网站url(请求头里面)
cookie
作用:
- 存储个性化设置
- 存储未登录时用户位移标识
- 存储已登录用户的凭证
- 存储其他业务
验证:
- 用户id
- 用户id+签名:crypto(第三方签名包),防止被篡改
- sessionID
- 私有变换(加密)
- http-only(防止xss)
- same-site: 兼容性不好(仅chrome支持)
- secure: 请求头???http
xss和cookie的关系
- xss可能偷取cookies
- http-only的cookie不会被偷
csrf跟cookie的关系
- csrf利用了用户的cookies
- 攻击站点无法读写cookies
- 最好能阻止第三方使用cookies
iframe透明度设置为0, 点击劫持
- 用户亲手操作
- 用户不知情
- 盗取资金
- 获取用户敏感信息
- 。。。
sandbox属性: 查看mdn
点击劫持防御
- javascript禁止内嵌:top.location跟window.location不相等
- x-frame-options禁止内嵌(服务器端控制)
- 其他辅助手段:比如添加验证码等,增加用户操作门槛,体验可能变差