Web 开发安全 | 青训营笔记

26 阅读2分钟

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

一、本堂课重点内容:

攻击者的角度

  1. Cross-Site Scripting(XSS)
  2. Cross-site request forgery(CSRF)
  3. Injection
  4. Denial of Service(DoS)
  5. Distributed DoS(DDoS)
  6. 中间人攻击

防御者的角度

  1. XSS 的防御
  2. 防御 CSRF 的正确姿势
  3. 防御 DoS
  4. 防御 Injection
  5. 防御中间人

二、详细知识点介绍:

攻击篇

XSS

XSS攻击通常指的是通过利用开发的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

特点:

  • 通常难以从UI上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制UI(例如弹窗),诱骗用户点击/填写表单

Stored XSS

  • 恶意脚本被存在数据库中
  • 访问页面 -> 读数据 == 被攻击
  • 危害最大,对全部用户可见

Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

Mutation-based XSS

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器会有区别(按浏览器进行攻击)

Cross-site request forgery(CSRF)

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

防御篇

XSS

  • 永远不相信用的提交内容
  • 不要将用户提交内容直接转换成DOM
XSS现成工具

前端:

  • 主流框架默认防御XSS
  • google-closure-library 服务端(Node)
  • DOMPurify

Content Security Policy(CSP)

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • 不使用eval+inline script

四、课后个人总结:

在本课中学习了web开发的安全知识,从攻击和防御两个方面了解了web开发。安全问题是我们需要关注的问题,作为开发者,我们需要保护用户的信息安全,而作为用户,也需要注意保护自己的相关利益。