CSRF、XSS、盗链攻击解释

CSRF(Cross-Site Request Forgery,跨站请求伪造)

CSRF是什么

CSRF 是一种攻击方式,攻击者通过利用用户在已认证的应用程序中的身份,伪造用户的请求来执行未经授权的操作。
这种攻击可以导致用户在不知情的情况下完成某些操作,如更改密码、发表评论或进行资金转账。

CSRF示例

用户登录网站a.com,攻击者会引导用户去点击网站b.com,b.com会冒充用户的身份去向a.com发起请求,a.com会验证请求,a.com不知道这个请求是b.com发起的,以为是用户发起的,就会去执行b.com请求参数,此时攻击完成。

CSRF图解

在这里插入图片描述
1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;
2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;
3.用户未退出网站A之前,在同一浏览器中,打开一个标签页访问恶意网站B;
4.恶意网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求访问第三方站点A;
5.浏览器在接收到这些攻击性代码后,根据恶意网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。
6.网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自恶意网站B的恶意代码被执行。

如何防御

  • 验证请求来源:应用程序可以检查请求的来源是否与预期的来源一致,可以通过检查 Referer 头部、使用 CSRF Token 或同源检查等方式来验证请求的合法性。
  • 添加随机生成的 CSRF Token:应用程序可以将 CSRF Token 添加到每个表单或请求中,并在服务器端验证 Token 的有效性。
  • 限制敏感操作的请求方法:将敏感操作限制为 POST、PUT、DELETE 等非幂等请求方法,在 GET 请求中不执行副作用操作。

XSS(Cross-Site Scripting,跨站脚本攻击)

XSS是什么

XSS 是一种攻击方式,攻击者通过将恶意脚本注入到受信任的网页中,使其在用户浏览器上执行。当用户访问受感染的页面时,恶意脚本可以窃取用户的敏感信息、篡改页面内容或执行其他恶意操作。XSS 可以分为三种类型:存储型 XSS、反射型 XSS 和 DOM 型 XSS。

如何防御

  • 输入验证和过滤:应用程序应该对用户输入进行严格的验证和过滤,防止恶意脚本的注入。
  • 输出编码:在将用户输入显示在网页上时,应使用适当的输出编码方式,如 HTML 转义或使用安全的模板引擎。
  • 使用 Content Security Policy(CSP):CSP 是一项安全政策,用于限制页面中可以加载的资源和执行的脚本,可以有效防御 XSS 攻击。

盗链(Hotlinking)

什么是盗链

盗链是指一个网站在其页面上使用其他网站的资源,例如图片、视频或脚本,而不是将资源保存在自己的服务器上。这种行为可能会对原始资源的所有者造成不公平的资源消耗,因为他们的资源被其他网站使用。有时,盗链还可能包含恶意意图,例如在盗链图像中嵌入广告或恶意代码。

盗链示例

A服务提供商不提供自己的服务,而通过技术手段去获取B服务提供商的资源到自己的网站上面,当用户去访问资源时,消耗的是B服务提供商的资源,但是增加的却是A服务提供商的点击量。此时被盗链的对象就是B服务提供商。
A相当于第三方网站,去跨域获取B的资源,构成了盗链。

如何判断有没有盗链

最直接的测试就是写一个网页插入一个来自第三方的链接,如果没有防护是可以下载到本地的显示的,防护了就会被判断为盗链,无法下载,请求被拦截。
根据referer请求头判断请求体的来源,判断是否为盗链。

如何防御

  • 配置服务器防盗链:通过配置服务器,可以限制只允许特定域名或来源访问资源,拒绝其他网站的访问。
  • 图片水印或替换:在图片上添加水印或修改图片,以防止被其他网站直接使用。
  • 使用访问控制和身份验证:通过访问控制和身份验证机制,限制只有授权用户才能访问资源。

每个攻击中涉及到的其它知识点补充

CSRF

什么是幂等方法

"幂等"是指对同一个操作进行多次执行所产生的效果与执行一次的效果相同。换句话说,无论执行多少次,结果都是一致的。

HTTP 请求方法可以被分类为幂等和非幂等请求方法:

幂等请求方法:GET:用于获取资源,多次发送相同的 GET 请求,不会对服务器端产生副作用或改变其状态。例如,多次请求同一个网页,不会对服务器上的资源进行修改。PUT:用于更新或替换服务器上的资源,多次发送相同的 PUT 请求,结果也是一致的。例如,多次更新同一个资源,最终结果与单次更新相同。非幂等请求方法:POST:用于向服务器提交数据,每次发送 POST 请求都可能对服务器端产生副作用或改变其状态。例如,创建新资源或执行一次性的操作。DELETE:用于删除服务器上的资源,多次发送相同的 DELETE 请求,结果也是不同的。例如,多次删除同一个资源,只有第一次会成功,后续请求将返回错误。

并非所有的非幂等请求方法都会引起状态的改变,例如,发送相同的 POST 请求可能会创建多个相同的资源,但这并不是幂等的,因为每个请求都产生了不同的结果。

CSRF Token、同源如何检查

CSRF Token:
  • 在服务器端生成一个随机的 CSRF Token,并将其嵌入到用户的会话中或者通过表单隐藏字段的方式传递给客户端。
  • 在每个需要防御 CSRF 攻击的请求中,包括表单提交、AJAX 请求等,将 CSRF Token 添加到请求中。
  • 在服务器端对每个请求进行验证,检查请求中的 CSRF Token 是否与用户会话中的 Token 相匹配。
  • 如果 CSRF Token 验证失败,服务器可以拒绝请求或采取其他适当的操作。
同源检查:
  • 同源检查是通过比较请求的来源(Origin 或 Referer)与目标站点的来源来验证请求的合法性。
  • 对于 Referer,浏览器会在请求头部的 Referer 字段中发送当前页面的 URL。
  • 服务器端可以通过比较请求的来源与目标站点的来源来判断请求是否来自同一源。
  • 如果来源不匹配,服务器可以拒绝请求或采取其他适当的操作。

需要注意的是,CSRF Token 和同源检查是可以同时使用的,以提供更强的防御机制。同时,合适的防御策略取决于具体的应用程序和开发环境,因此在实施防御措施时需要根据具体情况进行调整。

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

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

相关文章

氧化铈稳定氧化锆(Ce-TZP)性能优成本低 市场发展潜力较大

氧化铈稳定氧化锆(Ce-TZP)性能优成本低 市场发展潜力较大 CeO2稳定ZrO2,氧化铈稳定氧化锆,英文缩写Ce-TZP,一种陶瓷材料,是以氧化锆为基体,以氧化铈为稳定剂,制造而成的增韧陶瓷。 氧…

芯片封测从入门到精通

文章目录 📑前言一、作者简介二、书籍亮点三、内容简介四、适读人群 📑前言 在科技日新月异的今天,芯片作为现代电子设备的核心部件,其性能与可靠性直接决定了整个产品的竞争力。而芯片封测,作为确保芯片性能与可靠性…

Aspice介绍——测试流程

文章目录 ASPICE简介一、V字模型的示意二、测试领域2.1 SWE.6:软件合格性测试过程目的过程成果基本实践(BP) 2.2 SYS.4:系统集成和集成测试过程目的过程成果基本实践(BP) 2.3 SYS.5:系统合格性测试过程目的…

【Java】已解决java.lang.NullPointerException异常

文章目录 一、问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决java.lang.NullPointerException异常 一、问题背景 在Java编程中,java.lang.NullPointerException(空指针异常)是一种常见的运行时异常。当应…

一些个人电脑用的小工具软件

1 个人电脑信息管理 如下; 整理自己的电脑信息;录入,保存,查询;添加和更新界面如下, 每次添加、更新之后重新点一下菜单的浏览; 下载, https://download.csdn.net/download/bcb…

SpringBoot+Vue小区物业管理系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.用户登录代码2.查询小区信息代码3.保存缴费信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootVue框架开发的小区物业管理系统。首先&#xf…

深入探索 Rust 的 clap 库:命令行解析的艺术

版本声明 Rust: 1.76clap: 4.5.1clap_complete 4.5.1rpassword: 7.3.1 结论先行 本文将从 CLI(Command Line Interface)命令行工具的概述讲起,介绍一个优秀的命令行工具应该具备的功能和特性。然后介绍 Rust 中一个非常优秀的命令行解析工…

《Windows API每日一练》4.3 点和线的绘制

理论上,所有的图形设备驱动程序所需要的就是SetPixel函数和GetPixel函数。其余的一切都可以使用在GDI模块中实现的更高层的例程来处理。例如,画一条线,GDI可以不停地调整x和y坐标,然后连续调用多次SetPixel函数来实现。 事实上&a…

2024 年最新 windows 操作系统部署安装 redis 数据库详细教程(更新中)

Redis 数据库概述 Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中介。Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基…

数据通信与网络(二)

计算机网络的性能指标 包括速率、带宽、吞吐量、时延、时延带宽积和利用率。 还有一些非性能指标:如费用、质量、标准化、可靠性、可扩展性、可升级性和可维性。 一、速率 指计算机网络中的主机在信道上单位时间内传送数据量,又称数据率(data rate)或…

每日AI资讯-20240616

1. AI漫画角色一致性大突破 由中山大学和联想团队联合提出AutoStudio,它是一个无需训练的多智能体协同框架。AutoStudio采用基于大语言模型的三个智能体来处理交互,并使用基于扩散模型的Drawer生成高质量图像。实验中,AutoStudio无论是在定量…

腾讯地图避坑-获取地图点击点的经纬度

map.on(click,(evt)>{console.log("evt",evt)let lat evt.latLng.getLat();//lat 获取let lng evt.latLng.getLng();//lng 获取console.log("evt.latLng-有效方式",evt.latLng)console.log("evt[latlng]-无效方式",evt[latlng])})

PiDiNet推理手顺

GitHub链接 https://github.com/hellozhuo/pidinet 运行环境 Pyhton 3.8 filelock3.14.0 fsspec2024.5.0 imageio2.34.1 intel-openmp2021.4.0 Jinja23.1.4 lazy_loader0.4 MarkupSafe2.1.5 mkl2021.4.0 mpmath1.3.0 networkx3.1 numpy1.24.4 open…

小程序外卖开发中的关键技术与实现方法

小程序外卖服务凭借其便捷性和灵活性,正成为现代餐饮行业的重要组成部分。开发一个功能完善的小程序外卖系统,需要掌握一系列关键技术和实现方法。本文将介绍小程序外卖开发中的核心技术,并提供具体的代码示例,帮助开发者理解和实…

认识异常

一、异常的概念和体系结构 1、异常的概念 在Java中,将程序执行过程中发生的不正常行为称为异常,常见的有算术异常,数组越界异常,空指针异常 2、异常的体系结构 从上图中可以看到: 1.Throwable:是异常体系…

Euro Efficiency(POJ, Open judge)

题目链接: 1252 -- Euro Efficiency 题目描述: 思路: 题面的大概意思就是给你一组基本面值的钱币,问你要凑出指定的面值最少需要多少个钱币的参与,钱币的参与可以是加法也可以是减法。 分析一下,由于答案与钱币参与的顺序无关,…

机器学习-课程整理及初步介绍

简介: 机器学习是人工智能的一个分支,它使计算机系统能够从经验中学习并改进其在特定任务上的表现,而无需进行明确的编程。机器学习涉及多种算法和统计模型,它们可以从数据中学习规律,并做出预测或决策。机器学习的应用非常广泛&…

LabVIEW的热门应用

LabVIEW是一种图形化编程语言,因其易用性和强大的功能,在多个行业和领域中广泛应用。介绍LabVIEW在以下五个热门应用领域中的使用情况,:工业自动化、医疗设备与生物医学工程、科学研究与实验室自动化、能源管理与智能电网、航空航…

[Shell编程学习路线]——if条件语句(单,双,多分支结构)详细语法介绍

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月17日7点50分 🀄️文章质量:95分 文章目录 ————前言———— 💯趣站&#x1f4af…

C语言王国——深入自定义类型(结构体)

目录 一、引言 二、结构体 1. 结构体类型的声明 2. 结构体变量的创建和初始化 2.1 创建 2.2 初始化 2.3 typedef 2.4 特殊声明 2.5 自引用 3. 结构成员访问操作符 4. 结构体内存对齐 4.1 对齐规则 4.2 offsetof 4.3 为什么存在内存对齐 5. 结构体传参 6. 结构体实现…