字节跳动青训营--前端day10
文章目录
- 前言
- 一、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 注意点
- 尽量不要动态生成DOM
- 若有String转换为DOM操作,需要提前将String进行转译
- 如果允许用户上传SVG文件/图片,则需要对其进行一次扫描(SVG文件内是允许嵌套script代码)
- 尽量不要做让用户自定义跳转这类行为,如果要做得需要做好过滤(允许自定义跳转的话实际上会传递js代码)
- 如果允许用户自定义样式,则需要对能够附带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相关推荐
- 字节跳动青训营--前端day7
文章目录 前言 一.Node.js 的应用场景 (why) 1. 前端工程化 2. web服务端应用 3. Electron跨端桌面应用 二.Node.js 运行时结(what) 1. V8 ,lib ...
- 第五届字节跳动青训营 前端进阶学习笔记(八)React框架入门
文章目录 前言 React 的设计思路 1.传统JavaScript更新UI的痛点 2.我们对UI代码的需求 3.组件 (1)组件定义 (2)组件设计 (3)组件结构 4.React的生命周期 Rea ...
- 字节跳动青训营--前端day8
文章目录 前言 一.CSR,SSR,SSG 1. CSR 2. SSR 3. SSG 4. SSR,SSG的优势 利于SEO 更短的首屏时间 二.什么是Next.js 三.Next.js客户端开发 1 ...
- 字节跳动青训营--前端day5
文章目录 前言 一.初识HTTP 拓展-输入地址到页面渲染发生了哪些事情 二.协议分析 1.发展 2.报文 2.1 请求报文: 请求行: 请求头 主体 2.2 响应报文: 状态行 响应头 响应正文 2 ...
- 字节跳动青训营--前端day1
文章目录 前言 一. 前端 1 前端的技术栈 2. 前端的边界 3. 前端的关注点 二. HTML 1. HTML常用标签及语义化 2. HTML 语法 3. 谁在使用我们写的HTML 前言 仅以此文 ...
- 字节跳动青训营--前端day3
文章目录 前言 一.写好JavaScript的一些原则 二.各司其职 三.组件封装 四.过程抽象 前言 仅以此文章记录学习 一.写好JavaScript的一些原则 各司其职:让HTML.CSS和Jav ...
- 字节跳动青训营--前端day2
文章目录 前言 一.css 1. css的组成 2. css三种使用方式 3.css的工作方式 二. css选择器Selector 1. 选择元素的方式 2. 伪类(pseudo-classes) 2 ...
- 第五届字节跳动青训营寒假 —— 前端专场
第五届字节跳动青训营寒假 -- 前端专场 文章目录 第五届字节跳动青训营寒假 -- 前端专场 青训营 - 前端练习题 每日一练 编程题 前端编程题 [342. 4的幂](https://leetcod ...
- 前后端免费学,字节跳动青训营-暑假专场报名启动
亲爱的小伙伴,你准备好了吗? 第六届字节跳动青训营,来咯! 无论你是初学者还是有一定经验 都可以在青训营找到属于自己的位置 全方位课程讲解 & 项目实践指导 让你轻松掌握「前端 or 后端」技 ...
最新文章
- 1024 Palindromic Number
- kafka数据丢失的场景
- java web编码详解_java web 开发 编码问题详解
- 使用Pocsuite3
- 上海理工大学第二届“联想杯”全国程序设计邀请赛 - Dahno Dahno(SW)
- leetcode:203. 移除链表元素(两种方法)
- python 接收邮件服务器地址_python实现的接收邮件功能示例【基于网易POP3服务器】...
- OJ1000: A+B Problem
- 编写程序,用户输入一个位以上的整数,输出其百位以上的数字。例如用户输入1234.则程序输出12.
- modbus 调试工具之modbus slave与modbus poll
- fcntl函数的作用及应用场景
- java 万年历_java万年历代码仅供参考
- 随机地图生成工具 fastMapper
- ubuntu linux ftp命令的使用
- 电脑硬盘分区不见了怎么恢复数据?
- Python基础学习:operator模块
- 简易md5验证python包md5hash
- MacBook连接显示器发热的解决方法
- HTML标签----图文详解
- webserver有哪些?
热门文章
- MDM(Afaria)设置iPad进入“引导模式”后,如何退出“引导模式”
- 数据库 'MessageManage' 的事务日志已满。若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列。
- 汇编EQU与DATA的区别
- Unable to execute HTTP request:The request signature we calculated does not match the signature you
- Java基础快速复习
- linux命令查看tcp连接,查看linux系统中的TCP连接
- 『AI原理解读』MindSpore1.2强大并行能力介绍与解读
- PacBio三代全长扩增子测序对珊瑚共生虫黄藻和细菌群落进行精确分类
- Canvas 橡皮擦效果
- python图像均匀加雾