WEB前后端漏洞分析与防御技巧--第一部分
文章目录
WEB前后端漏洞分析与防御技巧–第一部分
第一章 前端XSS
XSS攻击分类
XSS攻击注入点
- HTML节点内容
- HTML属性
- JavaScript代码
- 富文本
浏览器自带防御:header中增加X-XSS-Protection:1。非常有限的手段,此方案只能防御出现在html内容或属性中的反射性XSS。
HTML节点内容和属性的防御
JavaScript代码的防御
转义相关字符:
注意:上面的方法并不保险,推荐直接使用json.Encode等方法将JS代码转义为json格式
富文本的防御
按白名单保留部分标签和属性
CSP(Content Security Policy)
- 内容安全策略
- 用于指定哪些内容可执行
ctx.set(`Content-Security-Policy`, `default-src 'self'`)
XSS防御总结
- 内置函数转义
- DOM解析白名单
- 第三方库,node的xss库等
- CSP
第二章 前端CSRF
Cross Site Request Forgy(跨站请求伪造)
CSRF攻击危害
- 利用用户登录态
- 用户不知情
- 完成业务请求
- 盗取用户资金
- 冒充用户发帖
- 损坏网站名誉
CSFR攻击防御
- 禁止第三方网站带Cookies
- same-site属性(目前支持的浏览器很少)
- same-site属性(目前支持的浏览器很少)
不访问A网站前端
- 在前端页面加入验证信息
- 验证码(前后端都需要改造)
- 因为攻击者无法知道验证码的内容,所以可以保证安全
- token
- 后端在cookies中设置token,并在前端提交表单的页面的隐藏域中存储提交表单需要带上的token,然后在后端校验此token是否和cookies中的一致。由于CSRF攻击者不了解cookie中token字段具体的值,可以很大程度上防止CSRF攻击。
referer为B网站
- 验证referer
- 禁止来自第三方网站的请求
注意:这里验证referer时在正则表达式中需要加上"^http://xxxxxx.com/",最后的这个斜杠一定不能少,以免其他网站申请”http://xxxxxx.com.attack/“这样的域名去进行攻击
第三章 前端Cookies问题
Cookies特性
- 前端数据存储
- 后端通过http头设置
- 请求时通过http头传给后端
- 前端可读写
- 遵守同源策略
Cookies作用
- 存储个性化设置
- 存储未登录时用户唯一标识
- 存储已登录用户的凭证
- 存储其他业务数据
Cookies-登录用户凭证
- 前端提交用户名密码
- 后端验证用户名密码
- 后端通过http头设置用户凭证
- 后续访问时后端先验证用户凭证
设置用户凭证的方法
- 用户ID (不安全)
- 用户ID + 签名 (防篡改)
- SessionId (推荐,注意:这里也可以使用SessionId+签名的方式预防CSRF攻击,此时使用此签名作为token)
Cookies和XSS的关系
- xss可能偷取Cookies
- http-only的Cookies不会被偷
Cookies和CSRF的关系
- CSRF利用了目标的cookies
- 攻击站点无法读写Cookies
- 最好能阻止第三方使用Cookies(same-site,但是目前兼容的浏览器不多)
Cookies-安全策略
-
签名防篡改
-
私有变换(加密),避免cookie篡改和信息泄露
- 加密:
- 解密:
- 加密:
-
http-only(防止XSS)
-
secure(仅在https中使用,防止传输过程中的窃听)
-
same-site
第四章 前端点击劫持问题
- 用户亲手操作
- 用户不知情
- 盗取用户资金(转账,消费)
- 获取用户敏感信息
点击劫持防御
攻击原理:使用iframe内嵌其他网站,并将透明度设为0,然后附在其他网站中,引诱用户点击
- JavaScript禁止内嵌(不能100%解决,使用sandbox就不行了)
- X-FRAME-OPTIONS(HTTP头)禁止内嵌(推荐,支持IE8以上)
- 其他辅助手段(例如验证码等)