文章目录

  • 前言
  • 一、web开发安全 - 攻击
    • 1. Cross-Site Scripting(XSS)
      • 1.1 存储型(Stored Xss)
      • 1.2 反射型(Reflect Xss)
      • 1.3 DOM型(DOM Xss)
      • 1.4 Mutation-based XSS
    • 2. Cross-Site Request Forgery(CSRF)
    • 3. SQL Injection
    • 4. Server-Side Request Forgery(SSRF)
    • 5. Denial of Service(DoS)
    • 6. Distributed DoS(DDoS)
  • 二、web开发安全 - 防御(开发者注意)
    • 1. XSS防御
      • 1.1 现成工具
      • 1.2 注意点
      • 1.3 Content Security Policy(CSP)
    • 2. CSRF防御
      • 避免携带 SameSite Cookie
    • 3. injection 防御
      • 3.1 sql injection
      • 3.2 injection beyond SQL
    • 4. DOS 防御
      • 4.1 DDOS
    • 5. 通过传输层防御(HTTPS)

前言

仅以此文章记录学习。


一、web开发安全 - 攻击

1. Cross-Site Scripting(XSS)

跨站脚本攻击
是针对用户层面的攻击。

恶意攻击者会往Web页面里插入恶意Script代码,当用户浏览该页面时,嵌入Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!

特点:

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

1.1 存储型(Stored Xss)

持久化

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

容易造成蠕虫,盗窃cookie

1.2 反射型(Reflect Xss)

非持久化

  • 不涉及到数据库
  • 从URL上攻击,一般容易出现在搜索页面

反射型XSS大多数是用来盗取用户的Cookie信息

1.3 DOM型(DOM Xss)

不经过后端

  • 不需要服务器的参与
  • 恶意攻击的发起+执行,全在浏览器完成
document.referer
window.name
location
innerHTML
documen.write

可能触发DOM型XSS的属性

1.4 Mutation-based XSS

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

2. Cross-Site Request Forgery(CSRF)

跨站请求伪造

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

3. SQL Injection

SQL注入

4. Server-Side Request Forgery(SSRF)

服务端伪造请求
攻击者伪造服务端的请求发起攻击,借由服务端为跳板来攻击目标系统

5. Denial of Service(DoS)

拒绝服务攻击

通过某种方式(构造特定请求),导致服务器资源被显著消耗来不及响应更多请求,导致请求挤压,进而雪崩效应。

6. Distributed DoS(DDoS)

分布式拒绝服务攻击

攻击特点:

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。

二、web开发安全 - 防御(开发者注意)

1. XSS防御

永远不要信任用户提交的内容,不要将用户提交的内容直接转换成DOM(可以把他当作字符串对待)

1.1 现成工具

前端:

  • 主流框架默认防御XSS
  • google-closure-library

服务端 (Node):

  • DOMPurify

1.2 注意点

  1. 尽量不要动态生成DOM
  2. 若有String转换为DOM操作,需要提前将String进行转译
  3. 如果允许用户上传SVG文件/图片,则需要对其进行一次扫描(SVG文件内是允许嵌套script代码)
  4. 尽量不要做让用户自定义跳转这类行为,如果要做得需要做好过滤(允许自定义跳转的话实际上会传递js代码)
  5. 如果允许用户自定义样式,则需要对能够附带URL的属性进行过滤(Background:url(xxx/xxx.png))

1.3 Content Security Policy(CSP)

内容安全策略

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

2. CSRF防御


判断浏览器是否同源

要求用户带上Token去请求接口

避免携带 SameSite Cookie

3. injection 防御

3.1 sql injection

  • 找到项目中查询SQL的地方,使用 prepared statement

3.2 injection beyond SQL

  • 最小权限原则 :sudo root
  • 建立允许名单 + 过滤:rm
  • 对URL类型参数进行协议、域名、ip 等限制:访问内网

4. DOS 防御

  • 完善代码Code Review的方式,避免写出贪婪匹配的方式(/(ab*)+/)
  • 代码扫描 + 正则性能测试
  • 拒绝用户提供的正则表达式

4.1 DDOS

  • 流量控制(过滤):负载均衡,API网关,CDN
  • 快速自动扩容,非核心服务降级(扛量)

5. 通过传输层防御(HTTPS)

HTTPS:HTTP+TLS

特点:

  • 可靠性:加密(拒绝明文)
  • 完整性:MAC验证(防篡改)
  • 不可抵赖性:数字签名 (验证身份)

完整性:

数字前面:

HTTP3(QUIC)也内置了TLS1.3

字节跳动青训营--前端day10相关推荐

  1. 字节跳动青训营--前端day7

    文章目录 前言 一.Node.js 的应用场景 (why) 1. 前端工程化 2. web服务端应用 3. Electron跨端桌面应用 二.Node.js 运行时结(what) 1. V8 ,lib ...

  2. 第五届字节跳动青训营 前端进阶学习笔记(八)React框架入门

    文章目录 前言 React 的设计思路 1.传统JavaScript更新UI的痛点 2.我们对UI代码的需求 3.组件 (1)组件定义 (2)组件设计 (3)组件结构 4.React的生命周期 Rea ...

  3. 字节跳动青训营--前端day8

    文章目录 前言 一.CSR,SSR,SSG 1. CSR 2. SSR 3. SSG 4. SSR,SSG的优势 利于SEO 更短的首屏时间 二.什么是Next.js 三.Next.js客户端开发 1 ...

  4. 字节跳动青训营--前端day5

    文章目录 前言 一.初识HTTP 拓展-输入地址到页面渲染发生了哪些事情 二.协议分析 1.发展 2.报文 2.1 请求报文: 请求行: 请求头 主体 2.2 响应报文: 状态行 响应头 响应正文 2 ...

  5. 字节跳动青训营--前端day1

    文章目录 前言 一. 前端 1 前端的技术栈 2. 前端的边界 3. 前端的关注点 二. HTML 1. HTML常用标签及语义化 2. HTML 语法 3. 谁在使用我们写的HTML 前言 仅以此文 ...

  6. 字节跳动青训营--前端day3

    文章目录 前言 一.写好JavaScript的一些原则 二.各司其职 三.组件封装 四.过程抽象 前言 仅以此文章记录学习 一.写好JavaScript的一些原则 各司其职:让HTML.CSS和Jav ...

  7. 字节跳动青训营--前端day2

    文章目录 前言 一.css 1. css的组成 2. css三种使用方式 3.css的工作方式 二. css选择器Selector 1. 选择元素的方式 2. 伪类(pseudo-classes) 2 ...

  8. 第五届字节跳动青训营寒假 —— 前端专场

    第五届字节跳动青训营寒假 -- 前端专场 文章目录 第五届字节跳动青训营寒假 -- 前端专场 青训营 - 前端练习题 每日一练 编程题 前端编程题 [342. 4的幂](https://leetcod ...

  9. 前后端免费学,字节跳动青训营-暑假专场报名启动

    亲爱的小伙伴,你准备好了吗? 第六届字节跳动青训营,来咯! 无论你是初学者还是有一定经验 都可以在青训营找到属于自己的位置 全方位课程讲解 & 项目实践指导 让你轻松掌握「前端 or 后端」技 ...

最新文章

  1. 1024 Palindromic Number
  2. kafka数据丢失的场景
  3. java web编码详解_java web 开发 编码问题详解
  4. 使用Pocsuite3
  5. 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
  6. leetcode:203. 移除链表元素(两种方法)
  7. python 接收邮件服务器地址_python实现的接收邮件功能示例【基于网易POP3服务器】...
  8. OJ1000: A+B Problem
  9. 编写程序,用户输入一个位以上的整数,输出其百位以上的数字。例如用户输入1234.则程序输出12.
  10. modbus 调试工具之modbus slave与modbus poll
  11. fcntl函数的作用及应用场景
  12. java 万年历_java万年历代码仅供参考
  13. 随机地图生成工具 fastMapper
  14. ubuntu linux ftp命令的使用
  15. 电脑硬盘分区不见了怎么恢复数据?
  16. Python基础学习:operator模块
  17. 简易md5验证python包md5hash
  18. MacBook连接显示器发热的解决方法
  19. HTML标签----图文详解
  20. webserver有哪些?

热门文章

  1. MDM(Afaria)设置iPad进入“引导模式”后,如何退出“引导模式”
  2. 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
  3. 汇编EQU与DATA的区别
  4. Unable to execute HTTP request:The request signature we calculated does not match the signature you
  5. Java基础快速复习
  6. linux命令查看tcp连接,查看linux系统中的TCP连接
  7. 『AI原理解读』MindSpore1.2强大并行能力介绍与解读
  8. PacBio三代全长扩增子测序对珊瑚共生虫黄藻和细菌群落进行精确分类
  9. Canvas 橡皮擦效果
  10. python图像均匀加雾