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…

Opencv无法自动补全

执行下面两条命令: 特别说明: 即使能补全了,但是还是有弊端,写参数的时候没有参数的候选项,所以相当于只能补全个函数名,谁有更好的解法,恳求留言告知。 参考1:https://blog.csdn.net/yuezhilan…

Java学习 -MySQL数据库索引以及索引优化 实例

7种 JOIN-ON 看图 索引的概念 概念:索引是一种帮助MySQL高效查询数据和排序数据的数据结构本质:在数据之外,数据库系统还维护一种数据结构,该数据结构称为索引,作用是能够帮助MySQL快速查找和排序数据底层&#xff…

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语言编写、支持网络、可基…

Vue3中出现 Uncaught (in promise) TypeError: data.includes is not a function 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 执行Vue3的时候浏览器终端出现如下问题 Uncaught (in promise) TypeError: data.includes is not a functionat Object.updateCurrentRowData (current.ts:40:15)at Object.setData (index.ts:35:22)at Object.commit (in…

轻型钢结构乙级资质设计项目实例集锦

小型物流仓库项目:设计一个占地面积约5000平方米的单层轻型钢结构物流仓库,采用门式刚架结构,优化空间布局,提高存储效率,同时满足防火和通风要求。 商业街改造项目:在城市中心区域,利用轻型钢…

力扣上的经典问题:接雨水

力扣上的经典问题:接雨水 在众多的编程题库中,力扣(LeetCode)是一个非常受欢迎的平台,拥有大量的算法和数据结构练习题。其中,接雨水(Trapping Rain Water)问题因其巧妙的思路和广泛…

数据通信与网络(二)

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

Python 学习 第二册 第14章 网络编程

----用教授的方式学习 目录 14.1 几个网络模块 14.1.1 模块 socket 14.1.2 模块 urllib 和 urllib2 14.1.3 其他模块 14.2 SocketServer 及相关的类 14.3.1 使用 SocketServer 实现分叉和线程化 14.3.2 使用 select 和 poll 实现异步 I/O 14.4 Twisted 14.4.1 下载…

聊聊jetcache的CacheManager

序 本文主要研究一下jetcache的CacheManager CacheManager jetcache-core/src/main/java/com/alicp/jetcache/CacheManager.java public interface CacheManager {<K, V> Cache<K, V> getCache(String area, String cacheName);void putCache(String area, Str…

架构扩展性

应用扩展性 X轴横向克隆 X轴横向克隆是指将应用部署在多个节点上&#xff0c;以实现负载均衡和高可用性。对于无状态应用&#xff0c;可以通过多节点克隆复制来实现横向扩展。而对于有状态应用&#xff0c;需要处理状态剥离&#xff0c;例如Session的处理。 具体来说&#x…

每日AI资讯-20240616

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

java 将获取json中的值

在Java中&#xff0c;可以使用FastJson库来获取JSON中的value值。下面是一个简单的示例代码&#xff1a; import com.alibaba.fastjson.JSONObject;public class JsonExample {public static void main(String[] args) {// JSON字符串String jsonString "{\"key1\&…