7 种常见的前端攻击
大家都知道,保证网站的安全是十分重要的,一旦网站被攻陷,就有可能造成用户的经济损失,隐私泄露,网站功能被破坏,或者是传播恶意病毒等重大危害。所以下面我们就来讲讲7 种常见的前端攻击。
1. 跨站脚本 (XSS)
跨站脚本攻击 (XSS) 是一种注入攻击,攻击者通过将恶意脚本注入到网页中,欺骗用户浏览器执行,从而窃取用户敏感信息或破坏网站。XSS 攻击是 Web 应用程序中最常见的安全威胁之一,也是造成重大安全事故的常见原因。
攻击方式:
-
反射型 XSS: 攻击者将恶意脚本注入到用户提交的数据中,例如评论表单、搜索表单等。当用户提交数据时,恶意脚本会被原样反射回用户浏览器,并被执行。
-
存储型 XSS: 攻击者将恶意脚本存储在服务器端,例如将恶意脚本注入到数据库中。当用户访问包含恶意脚本的页面时,恶意脚本会被浏览器执行。
-
DOM 型 XSS: 攻击者利用浏览器 DOM 的漏洞来执行恶意脚本。例如,攻击者可以利用
<script>标签的onerror属性来执行恶意脚本。
防御措施:
-
对用户输入进行转义和过滤: 使用 HTML 实体转义或其他安全编码方法来转义用户输入中的特殊字符,防止恶意脚本注入。
-
使用 HTTPOnly Cookie: 将 Cookie 的
HttpOnly属性设置为true,可以防止 JavaScript 代码直接访问 Cookie。 -
使用 Content Security Policy (CSP): CSP 是一种通过配置浏览器安全机制来限制网页中可执行内容的安全技术。
-
使用前端常用框架 (如Vue,React等):这些框架模板字符一般都经过转义和过滤,具有一定的安全性 。代码示例
<form action="/submit_comment"><input type="text" name="comment" value=""><button type="submit">提交评论</button> </form> -
上面表单中没有对用户输入的评论进行过滤,攻击者可以输入恶意JavaScript代码,例如:
<script>alert(document.cookie); // 窃取用户Cookie </script> -
当用户提交评论时,恶意代码会被嵌入到评论中,并保存在服务器上。
-
当其他用户访问包含恶意评论的页面时,恶意代码会被浏览器执行,从而窃取用户Cookie或造成其他伤害。
2. 依赖库风险
前端网站通常会依赖很多的第三方库和组件来实现各种功能。如果这些依赖库存在漏洞,攻击者可以利用这些漏洞来攻击网站。
攻击方式:
-
远程代码执行 (RCE): 攻击者可以利用依赖库漏洞在受害者的浏览器或服务器上执行任意代码。
-
跨站请求伪造 (CSRF): 攻击者可以利用依赖库漏洞伪造用户请求,诱骗用户执行非预期的操作。
防御措施:
-
使用经过安全审计的依赖库: 选择使用经过安全审计的依赖库,可以减少依赖库漏洞的风险。
-
定期更新依赖库: 定期更新依赖库,及时修复已知的安全漏洞。
-
尽量减少对第三方库的依赖: 尽量减少对第三方库的依赖,自己开发代码,可以
代码示例:
// 使用存在漏洞的第三方库
const jsdom = require("jsdom"); jsdom.jsdom('<script>alert(1)</script>'); // 解析包含恶意JavaScript代码的HTML
3. 跨站请求伪造 (CSRF)
跨站请求伪造 (CSRF) 是一种安全攻击,攻击者诱骗用户在其已登录的应用程序中执行非预期的操作,例如转账、修改个人信息等。CSRF 攻击通常利用用户的信任来实施,因为用户在自己的浏览器中看到的是来自可信网站的请求,而没有意识到该请求实际上是被攻击者伪造的。
攻击方式:
-
利用表单提或者链接跳转。攻击者会构造一个恶意表单或者链接,诱骗用户点击。当用户点击表单时,会向受害者的应用程序发送一个 POST 请求或者GET 请求,其中包含攻击者想要执行的操作。
-
利用图片请求: 攻击者利用浏览器对图片的自动请求特性,构造一个包含恶意请求的图片。当用户浏览包含恶意图片的页面时,浏览器会自动向受害者的应用程序发送请求,其中包含攻击者想要执行的操作。
防御措施:
-
在表单中添加 CSRF 令牌: 在表单中添加一个随机生成的 CSRF 令牌,并将其作为隐藏域提交给服务器。服务器端在验证用户请求时,会检查 CSRF 令牌的有效性。
-
使用 HTTP Referer 头: 使用 HTTP Referer 头来检查请求来源,防止跨域请求。
-
使用 SameSite Cookie 属性: 将 Cookie 的
SameSite属性设置为Strict,可以防止 CSRF 攻击。
代码示例:
<form action="/transfer"><input type="hidden" name="amount" value="1000"><input type="submit" value="转账">
</form>
-
上面的表单中没有使用CSRF令牌,攻击者可以构造一个恶意链接,诱骗用户点击。
-
当用户点击恶意链接时,会向转账页面发送一个POST请求,其中包含转账金额等信息。
-
由于用户的浏览器会自动携带Cookie,攻击者可以利用Cookie来冒充用户身份,执行转账操作。
4. 点击劫持 (Clickjacking)
点击劫持 (Clickjacking) 是一种欺骗攻击,攻击者在可信赖的页面上使用透明或半透明的覆盖层来欺骗用户点击他们所看到的以外的内容,例如按钮或链接。当用户点击覆盖层时,实际上点击的是攻击者精心设计的恶意内容,例如钓鱼网站或下载恶意软件的链接。
攻击方式:
-
利用透明层: 攻击者在可信赖的页面上使用透明层覆盖真正的链接或按钮。当用户点击页面时,实际上点击的是透明层中的恶意内容。
-
利用iframe: 攻击者在可信赖的页面中嵌入一个iframe,iframe的内容是一个精心设计的恶意页面。当用户点击页面时,实际上点击的是iframe中的恶意内容。
-
利用CSS定位: 攻击者利用CSS定位技术将恶意内容定位在可信赖的页面之上。当用户点击页面时,实际上点击的是恶意内容。
防御措施:
-
使用 X-Frame-Options 头: 在服务器端设置 X-Frame-Options 头,禁止其他网站嵌入本网站的页面。
-
使用 Content Security Policy (CSP): CSP 是一种通过配置浏览器安全机制来限制网页中可执行内容的安全技术。
-
避免使用透明层: 尽量避免在页面中使用透明层,如果必须使用,则需要仔细测试并确保透明层不会被攻击者利用。
示例:
<div style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0.7;"><button style="position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);">点击我</button>
</div><a href="https://example.com/malicious_link">真正的链接</a>
-
上述代码中,存在一个透明的覆盖层,覆盖了真正的链接。
-
当用户点击页面时,实际上点击的是覆盖层中的按钮,而不是真正的链接。
-
攻击者可以利用此漏洞来诱骗用户执行恶意操作,例如访问钓鱼网站或下载恶意软件。
5. 内容交付网络 (CDN) 劫持
内容交付网络 (CDN) 劫持是指攻击者劫持 CDN 节点,修改 CDN 上的库文件,在其中注入恶意代码,进而使应用程序的用户下载到这些恶意代码。CDN 劫持攻击通常利用 CDN 节点的安全漏洞或配置错误来实施。
攻击方式:
-
利用 CDN 节点漏洞: 攻击者利用 CDN 节点的漏洞,例如 SQL 注入、远程代码执行 (RCE) 等,获取对 CDN 节点的控制权。
-
利用 CDN 配置错误: 攻击者利用 CDN 配置错误,例如未启用 SSL/TLS 加密、未配置访问控制等,将恶意代码注入到 CDN 节点上。
防御措施:
-
使用 HTTPS 加密: 在 CDN 节点和用户浏览器之间使用 HTTPS 加密,可以防止攻击者窃取或篡改传输数据。
-
使用内容完整性验证 (CV): 使用 CV 技术来确保 CDN 内容的完整性,防止恶意代码被注入。
-
定期监控 CDN 节点: 定期监控 CDN 节点的安全状况,及时发现并修复安全漏洞。
-
选择可靠的 CDN 服务商: 选择可靠的 CDN 服务商,可以降低被攻击的风险。
6. HTTPS 降级
HTTPS 降级是指攻击者诱使用户使用不安全的 HTTP 连接访问应用程序,从而窃取用户敏感信息。HTTPS 是一种安全协议,可以对传输数据进行加密,防止攻击者窃取或篡改。然而,一些旧的浏览器或设备可能不支持 HTTPS,或者用户可能被攻击者诱骗使用不安全的 HTTP 连接。
攻击方式:
-
利用社会工程: 攻击者通过社交工程手段,例如钓鱼网站、虚假信息等,诱骗用户点击不安全的链接。
-
利用浏览器漏洞: 攻击者利用浏览器漏洞,将用户重定向到不安全的 HTTP 连接。
-
利用中间人攻击: 攻击者在用户和服务器之间进行拦截,将用户连接降级为不安全的 HTTP 连接。
防御措施:
-
强制使用 HTTPS: 在服务器端强制使用 HTTPS 连接,并禁止 HTTP 连接。
-
使用 HSTS 头: 在服务器端设置 HSTS 头,告诉浏览器始终使用 HTTPS 连接访问该网站。
示例:
<a href="http://example.com">访问网站</a>
上面的链接使用不安全的HTTP协议,攻击者可以监听用户的网络流量,窃取用户Cookie、表单数据等敏感信息。
7. 中间人攻击
中间人攻击 (Man-in-the-Middle Attack) 是攻击者在用户和服务器之间进行拦截,窃取或篡改通信内容。中间人攻击通常利用不安全的网络连接或 Wi-Fi 热点来实施。
攻击方式:
-
利用不安全的网络连接: 攻击者建立一个伪造的 Wi-Fi 热点,并诱骗用户连接。当用户通过伪造的 Wi-Fi 热点访问网站时,攻击者可以窃取用户发送到服务器的 Cookie、表单数据、登录凭证等敏感信息。
-
利用 SSL/TLS 漏洞: 攻击者利用 SSL/TLS 协议的漏洞,例如心脏出血漏洞、POODLE 漏洞等,解密用户和服务器之间的通信内容。。
防御措施:
为了防御中间人攻击,开发人员可以采取以下措施:
-
使用 HTTPS 加密: 在服务器端和用户浏览器之间使用 HTTPS 加密,可以防止攻击者窃取或篡改传输数据。
-
使用公钥密码认证: 使用公钥密码认证可以确保通信双方身份的真实性,防止攻击者冒充服务器或用户进行攻击。
-
安装杀毒软件和防火墙: 安装杀毒软件和防火墙可以帮助防御一些常见的中间人攻击。
相关文章:
7 种常见的前端攻击
大家都知道,保证网站的安全是十分重要的,一旦网站被攻陷,就有可能造成用户的经济损失,隐私泄露,网站功能被破坏,或者是传播恶意病毒等重大危害。所以下面我们就来讲讲7 种常见的前端攻击。 1. 跨站脚本 (X…...
element plus实现点击上传于链接上传并且回显到upload组件中
摘要: 今天遇到一个问题:vue3使用elemnt plus的上传图片时,数据是从别人的系统导出来的商品,图片是http的形式的,并且商品很多的,一个一个下载下来再上传很麻烦的,所以本系统插件商品时图片使用…...
ELK日志分析系统部署
ELK日志分析系统 ELK指的是ElasticsearchLogstashKibana这种架构的缩写。 ELK是一种日志分析平台,在很早之前我们经常使用Shell三剑客(一般泛指grep、sed、awk)来进行日志分析,这种方式虽然也可以应对多种场景,但是当…...
驾校小程序:一站式学车解决方案的设计与实践
一、引言 随着移动互联网技术的飞速发展,人们的生活方式和消费习惯正在发生深刻变化。驾校作为传统的服务行业,也面临着数字化转型的迫切需求。驾校小程序作为一种轻量级的应用,能够为用户提供便捷、丰富的学车服务,成…...
【自然语言处理】BERT模型
BERT:Bidirectional Encoder Representations from Transformers BERT 是 Google 于 2018 年提出的 自然语言处理(NLP)模型,它基于 Transformer 架构的 Encoder 部分。BERT 的出现极大提升了 NLP 任务的性能,如问答系…...
Android 添加如下飞行模式(飞行模式开和关、飞行模式开关菜单显示隐藏)接口
请添加如下飞行模式(飞行模式开关、飞行模式开关显示隐藏)接口: 飞行模式飞行模式开关com.action.airplankey: enable value:boolean true open the airplan false close the airplan关闭Intent intent = new Intent(); intent.setAction("com.action.airplan");…...
【Vue3】基于 Vue3 + ECharts 实现北京市区域地图可视化
文章目录 基于 Vue3 ECharts 实现北京市区域地图可视化1、引言2、项目初始化2.1、环境搭建2.2 、安装依赖2.3、项目结构 3、地图数据准备3.1、地图 JSON 文件获取(具体的json数据) 4、 组件开发4.1、Map 组件的设计思路4.2、基础结构实现4.3、核心数据结…...
【IC】什么是min period check
在 Synopsys Primetime 工具中可以检查.lib 文件中时钟输入的最小周期。想象这样一个场景,有一个设计 A,它有一个名为 clk 的时钟,并且该设计的 clk 周期被设定为一个值,比如 2 纳秒,即 500MHz。假设我们在进行静态时序…...
MyBatis入门之一对多关联关系(示例)
【图书介绍】《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》-CSDN博客 《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》(杨章伟,刘祥淼)【摘要 书评 试读】- 京东图书 …...
【Git 】Windows 系统下 Git 文件名大小写不敏感
背景 在 Windows 系统上,Git 对文件名大小写的不敏感性问题确实存在。由于 Windows 文件系统(如 NTFS )在默认情况下不区分文件名大小写所导致的。 原因分析 文件系统差异 Windows文件系统(如 NTFS)默认不区分文件名…...
【算法系列-二叉树】层序遍历
【算法系列-二叉树】层序遍历 文章目录 【算法系列-二叉树】层序遍历1. 算法分析🛸2. 相似题型🎯2.1 二叉树的层序遍历II(LeetCode 107)2.2 二叉树的右视图(LeetCode 199)2.3 二叉树的层平均值(LeetCode 637)2.4 N叉树的层序遍历(LeetCode 429)2.5 在每个…...
我的世界方块改进版
引子 之前文章的磁性方块,通过3D打印实现,也批量打印了一些,下图就是一个小树 使用过程中,发现磁力感觉不紧,所以想改进一版。 正文 之前的结构如下:: 如果出现相邻的空隙间的磁铁相互作用&am…...
博客搭建之路:hexo增加搜索功能
文章目录 hexo增加搜索功能本地搜索弊端algolia搜索 hexo增加搜索功能 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 作为一个博客,没有搜索功能,如何在大批文章中找到自己想要的,那在hexo中如何增加搜索功能呢? search:path: sea…...
2024年最新互联网大厂精选 Java 面试真题集锦(JVM、多线程、MQ、MyBatis、MySQL、Redis、微服务、分布式、ES、设计模式)
前言 春招,秋招,社招,我们 Java 程序员的面试之路,是挺难的,过了 HR,还得被技术面,在去各个厂面试的时候,经常是通宵睡不着觉,头发都脱了一大把,还好最终侥幸…...
MybatisPlus入门(一)MybatisPlus简介
一、MyBatis简介 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率 - 官网:https://mybatis.plus/ https://mp.baomidou.com/ MyBatisPlus特性: - 无侵入:只做增强…...
QoS学习笔记
QoS业务分类 基于 DiffServ 服务模型的 QoS 业务可以分为以下几大类: 流分类和标记(Traffic classification and marking):要实现差分服务,需要首先将数据包分为不同的类别或者设置为不同的优先级。将数据包分为不同…...
图(邻接矩阵)知识大杂烩!!(邻接矩阵结构,深搜,广搜,prim算法,kruskal算法,Dijkstra算法,拓扑排序)(学会一文让你彻底搞懂!!)
小伙伴们大家好,今天给大家带来图(邻接矩阵)的各种知识,让你看完此文章彻底学会邻接矩阵的相关问题。 1.邻接矩阵表示方法 1.1知识讲解 我们用一个二维数组arr来表示图。若图为有向图,其中arr【i】【j】w表示i号点和…...
Prometheus自定义PostgreSQL监控指标
本文我们将介绍如何在Prometheus中创建自定义PostgreSQL指标。默认情况下由postgres_export运行的查询可能不能满足用户需求,但我们可以创建自定义查询,并要求postgres_exporter公开自定义查询的结果。postgres_exporter最近被移到了Prometheus Communit…...
400行程序写一个实时操作系统(十六):操作系统中的调度策略
前言 在前面我们完成了Sparrow的临界区的代码,使用临界区,能够解决常见的并发问题,现在该完善我们的调度算法了。 调度算法在操作系统领域常常是热门的话题。不同的用途将会使用不同的调度策略。在本节,笔者将为大家介绍一些操作…...
从安灯系统看汽车零部件工厂的智能制造转型
在当今快速发展的制造业领域,汽车零部件工厂正面临着日益激烈的市场竞争和不断提高的客户需求。为了在竞争中脱颖而出,实现可持续发展,许多汽车零部件工厂纷纷踏上智能制造转型之路。而安灯系统作为一种重要的生产管理工具,在这场…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
