Web开发安全| 青训营笔记

91 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第11天

本节课知识要点

  1. 攻击
  2. 防御

Web安全一窥

Web安全问题会危害到用户,公司还有程序员

攻击方式

  1. XSS(Cross-Site Scripting)跨站脚本攻击,将恶意脚本注入到script标签中,其主要利用了开发者盲目信任用户提交的数据内容,直接把用户提交内容变成DOM。分为Stored XSS,Reflected XSS和Mutation-based XSS三种
    • 通常难以从UI上感知到XSS攻击
    • 可以窃取用户的隐私信息(cookies/token)
    • 绘制UI,诱骗用户点击/填写表单
  2. CSRF(Cross-Site request forgery)跨站伪造请求
    • 在用户不知情的前提下
    • 利用用户权限
    • 构造指定的HTTP请求,窃取或者修改用户的敏感信息
  3. SQL Injection 数据库注入攻击,通过请求对SQL参数进行恶意注入,在Server中运行之后攻击者就可以获取,修改和删除数据等操作。除了数据库注入还有CLI,SSRF等注入攻击
  4. Denial of Service(DoS)服务拒绝,通过某种方式,导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压,进而出现雪崩效应
    1. ReDoS 通过正则表达式来进行一个攻击
    2. DDos 短时间内,通过大量的僵尸设备的请求流量,导致服务器不能及时完成全部请求,导致请求堆积。
  5. 中间人攻击,通过恶意WebView,路由器等可以窃取信息,修改请求并返回

防御方式

  1. 针对XSS攻击,永远不要信任用户提交的内容,不要将其内容直接转换成DOM对象,对其当成字符串处理就好,在前端方面,主流框架都是默认防御XSS攻击的,还有google-closure-library在服务端可以通过DOMPurify来进行防御
  2. CSP(Content Security Policy)内容安全协议,认定哪些源是安全的,且来自它的脚本是可被执行的,并对eval+inline script说不
  3. 针对CSRF防御,看请求头部,对请求的Origin,Referer和token进行校验,面对iframe攻击可以通过属性X-Frame-Options:DENY/SAMEORIGIN,在写代码的时候要anti-pattern,get和post要分开,samesite和cors
  4. 针对注入攻击,找到项目中查询SQL的地方,然后使用prepared statement,遵循最小权限原则,建立允许名单和过滤,对URL类型参数进行协议,域名,ip等限制
  5. 针对DoS,对于ReDoS有如下方法,Code Review,代码扫描+正则表达式性能测试,或者不提供给用户使用正则表达式。对于DDoS有两个防御思路,过滤和抗量。
  6. 针对中间人攻击,使用https,但是当签名算法不够健壮的时候会被暴力破解。HSTS,将HTTP主动升级到HTTPS

个人感悟

对于本次课,我意识到Web安全是有多么重要,在学习过程中是会涉猎到这些知识,但是从未有如此细致的去了解过这些内容。