字节跳动青训营--前端day10

news2024/11/17 20:40:48

文章目录

  • 前言
  • 一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/348908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何使用TypeScript封装一个简单好用的Http工具

前言 Http 请求对于任何系统都是一大基石,那么如何封装一个高可用的 Http 请求工具呢?接下来手把手教你使用 TypeScript 封装一个高可用的 Http 请求工具。 本工具由三部分构成:Http基础层、基础方法层、业务层。 Http基础层 Http基础层主…

Lua语法入门

注意:文章将持续更新完善 文章目录一. 初识Lua二. HelloWorld三. Lua的数据类型四. 变量五. 循环六. 函数七. 条件控制一. 初识Lua Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中&#…

VR全景行业的应用价值如何呈现?

互联网高速发展的今天,多媒体所包含的种类也是越来越多,而一些较为传统的表现方式已经越来越无法满足大部分客户对展示方式的要求。而在传统的表现方式中,展现的方式无非是静态的平面图片以及动态的视频,但是他们都有一个缺点就是…

MybatisPlus------BaseMapper<T>删除方法详解(三)

MybatisPlus------BaseMapper删除方法详解(三) MybatisPlus框架中,创建的mapper接口,需要继承BaseMapper接口,T代表与表对应的实体类。 BaseMapper接口中提供了对单表进行增删改查的基础方法。 下面分别介绍四种: int…

2023.2.15每日一题——867. 转置矩阵

每日一题题目描述解题核心解法一:二维表示 模拟解法二:一维表示 模拟题目描述 题目链接:867. 转置矩阵 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 矩阵的 转置 是指将矩阵的主对角线翻转,交换矩阵…

牛客教你用雇主品牌力抢人才!附6类校招玩法

最新校招数据显示,79%的应届生在Offer抉择时首要考量薪资福利。但谈钱多伤感情啊~牛客从100案例中挑出6种最潮的校招雇主品牌玩法,助力你抢人才。01、英特尔中国:“芯”动小镇雇主是否能让自己产生激情和热情,已经成为应届生选择O…

Sharding-jdbc读写分离

一、binlog日志查看是否开启binlog日志 show variables like log_%;注意:直接打开mysql-bin是乱码;修改my.ini配置binlog-row-imageFULLcharacter-set-serverutf8mb4default-character-setutf8mb4转成log打开首先需要切换到存放mysqlbinlog.exe应用程序的…

IDEA中使用tomcat8-maven-plugin插件

第一种方式 pom.xml <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.or…

android 混淆后的异常信息 工具处理

我们可以利用SDK中tools下的proguardgui.bat工具和混淆对应文档进行反混淆处理 D:\Android\sdk\tools\proguard\bin\proguardgui.bat 工具在SDK中的位置&#xff0c;有的SDK版本不同这个工具的具体位置可能有改变&#xff0c;也可以在tools中直接搜索proguardgui.bat&#x…

Netty 入门

文章目录一、概述1.1 Netty 是什么&#xff1f;1.2 Netty 的地位1.3 Netty 的优势二、Hello World2.1 目标2.2 服务器端2.3 客户端2.4 流程梳理三、组件3.1 EventLoop3.2 演示 NioEventLoop 处理 io 事件3.3 演示 NioEventLoop 处理普通任务3.4 演示 NioEventLoop 处理定时任务…

ThingsBoard-规则链-check existence fields

1、概述 今天我主要讲解【check existence fields】规则节点,顾名思义,这个节点就是检测字段是否存在。 可以检查规则节点消息(msg)和元数据(metadata)的字段。 2、节点理解 2.1、概述 【check existence fields】节点如图所示: 名称:你需要给这个节点命名。 Mes…

spring security简单教程以及实现完全前后端分离

简单教程spring security是spring家族的一个安全框架&#xff0c;入门简单。对比shiro&#xff0c;它自带登录页面&#xff0c;自动完成登录操作。权限过滤时支持http方法过滤。在新手入门使用时&#xff0c;只需要简单的配置&#xff0c;即可实现登录以及权限的管理&#xff0…

微服务 分布式搜索引擎 Elastic Search 索引库与文档操作

文章目录⛄引言一、Elastic Search 索引库⛅mapping 映射属性二、索引库的 CRUD &#xff08;增删改查&#xff09;⏰索引库的创建和映射⚡对索引库进行查询、修改、删除操作四、Elastic Search 文档操作⌚新增、查询、删除文档⚡修改Elastic Search 文档⛵小结⛄引言 本文参考…

C++——类和对象2

目录 类的六个默认成员函数 1. 构造函数 1.1 特性 1.2 实现 1.3 默认构造函数 1.4 默认构造函数处理行为 1.5 初始化列表 1.6 explicit关键字 2. 析构函数 2.1 特性 2.2 实现 2.3 默认析构函数 2.4 对象析构的顺序 3. 拷贝构造函数 3.1 特性 3.2 拷贝构造的…

JVM_内存区域与内存溢出异常

文章目录一、运行时数据区域1、程序计数器2、Java虚拟机栈3、本地方法栈4、Java堆5、方法区6、运行时常量池7、直接内存二、HotSpot虚拟机对象1、对象的创建2、对象的内存布局3、对象的访问定位三、OutOfMemoryError和StackOverflowError异常1、Java堆溢出&#xff08;最常见&a…

闭包可能导致的内存泄漏

什么是闭包 闭包是函数可以保留和访问其外部变量&#xff0c;比如 let a 1 let b function() {console.log(a) }这里变量b指向的函数可以访问外面的变量&#xff0c;你会说这不是废话吗&#xff1f;函数都可以访问外部变量呀 那再看一个例子 function f() {let value 123…

人人都能看懂的Spring源码解析,配置解析与BeanDefinition加载注册

人人都能看懂的Spring源码解析&#xff0c;扫描加载BeanDefinition的过程原理解析什么是BeanDefinition&#xff1f;两种配置方式扫描并读取配置信息&#xff0c;解析成BeanDefinition保存BeanDefinition源码走读xml配置方式整体流程示例代码BeanDefinition加载解析的入口创建X…

机器学习基础

一、基本概念 1 学习的概念 1975年图灵奖获得者、1978年诺贝尔经济学奖获得者、著名学者赫伯特.西蒙 (Herbert Simon) 曾下过一个定义: 如果一个系统&#xff0c;能够通过执行某个过程&#xff0c;就此改进了它的性能&#xff0c;那么这个过程就是学习.由此可看出&#xff0c;…

思科基础组面试(部分)

面了三轮&#xff0c;前面两轮因为录的视频坏了&#xff0c;很多问题忘了。 Round 1 Q:举例说明为什么hashmap线程不安全 A1: JDK1.8 HashMap线程不安全体现在&#xff1a;数据覆盖: 其中第六行代码是判断是否出现hash碰撞&#xff0c;假设两个线程A、B都在进行put操作&#…

软件测试未来发展趋势怎么样

未来&#xff0c;互联网技术是很多企业能够活下去的关键点。互联网技术成为新的基建&#xff0c;互联网“基建”化就决定了软件测试行业的缺口会一直扩大。 并且&#xff0c;软件测试岗位&#xff0c;已不仅局限于互联网企业&#xff0c;现已逐步深入到实体产业&#xff0c;金…