《白帽子讲 Web 安全》之跨站请求伪造
引言
在数字化时代,网络已深度融入人们生活的方方面面,Web 应用如雨后春笋般蓬勃发展,为人们提供着便捷高效的服务。然而,繁荣的背后却潜藏着诸多安全隐患,跨站请求伪造(CSRF)便是其中极为隐蔽且危险的一种。它如同隐匿在暗处的黑客,趁用户在 Web 世界中畅游时,悄然发动攻击,严重威胁着用户的账户安全以及 Web 应用的稳定与信誉。吴翰清在《白帽子讲 Web 安全》中对其进行了深入剖析,接下来,让我们一同揭开 CSRF 的神秘面纱,深入剖析其原理、攻击手段与防御策略。
一、CSRF 简介
定义
CSRF,即 Cross Site Request Forgery 的缩写,是一种常见且隐蔽的 Web 攻击手段。攻击者精心设计诱导策略,使已登录目标网站的用户访问恶意网站,进而利用用户在目标网站的身份权限,在用户毫不知情的情况下,在目标网站执行非用户本意的操作。这一过程中,攻击者无需获取用户的登录凭证,仅借助浏览器的特性就可达成攻击目的。
示例
以社交网站为例,假设该网站的 “添加关注” 功能通过向http://example.com/follow?id=USERID发送 GET 请求来实现。当用户已登录example.com,此时若访问了恶意网站,而恶意网站中嵌入了<img src="http://example.com/follow?id=1234"/>。由于浏览器会自动加载图片,便会向该链接发送 GET 请求。又因为用户已登录example.com,浏览器会自动携带该网站的 Cookie,目标网站基于 Cookie 验证用户身份,将此请求视为用户的正常操作,最终导致用户在不知情的状况下关注了 UID 为 1234 的用户。
二、CSRF 详解
1.本质
CSRF 攻击成功的关键在于巧妙利用浏览器自动携带用户已登录网站 Cookie 的特性。当用户访问恶意网站时,恶意网站精心构造的请求会借助浏览器的自动行为,以用户身份被发送到目标网站。目标网站仅依据请求中携带的 Cookie 来验证用户身份,却无法判断该请求究竟是用户的真实意愿,还是攻击者伪造的。这种机制使得攻击者能够在用户不知情的情况下,在目标网站执行各种操作,如转账、修改用户信息等,给用户带来极大的损失。
2.GET 和 POST 请求
GET 请求
攻击者通常通过构造包含恶意操作的 URL 发起 GET 请求攻击。在恶意网站中设置一个图片链接,其src属性为目标网站的操作 URL,是常见的攻击手段。当用户访问恶意网站时,浏览器自动向该 URL 发送 GET 请求,恶意操作得以执行。
假设目标网站有一个删除用户评论的操作,对应的 URL 为http://example.com/delete_comment?id=COMMENTID。攻击者在恶意网站嵌入<img src="http://example.com/delete_comment?id=5678"/>,若用户已登录example.com且该评论属于此用户,那么用户在访问恶意网站时,浏览器会自动发送请求,导致用户的评论被删除。
POST 请求
对于 POST 请求,攻击者常采用自动提交表单的方式。在恶意网站中隐藏一个自动提交的表单,表单的action属性为目标网站的操作 URL。当用户访问恶意网站时,该表单会自动提交,以用户身份执行 POST 请求。
比如,目标网站有一个修改用户密码的功能,通过 POST 请求将新密码发送到http://example.com/change_password。攻击者在恶意网站创建如下表单:
<form action="http://example.com/change_password" method="post" style="display:none;"><input type="hidden" name="new_password" value="attacker_password"></form><script>document.forms[0].submit();</script>
当用户登录example.com后访问该恶意网站,表单会自动提交,用户的密码就被修改为攻击者设置的密码。
3.CSRF 蠕虫
CSRF 蠕虫是一种极其危险的 CSRF 攻击形式,其危害性远超普通的 CSRF 攻击。攻击者利用网站的 CSRF 漏洞,结合 XSS 攻击手段(例如通过 XSS 获取用户的好友列表),实现恶意操作的自动传播。举例来说,攻击者在用户页面自动发布包含恶意链接的内容,当其他用户访问该页面时,就会触发 CSRF 攻击。
假设某社交平台存在 CSRF 漏洞,攻击者利用 XSS 在用户 A 的页面发布一条动态,内容为<img src="http://example.com/send_spam?message=恶意广告内容&to=USERID"/>,其中USERID通过 XSS 获取的用户 A 的好友列表动态生成。当用户 A 的好友浏览其页面时,浏览器会自动向目标网站发送请求,以该好友的身份向其他用户发送恶意广告,如此循环,攻击范围像滚雪球一样迅速扩大,对整个社交平台的用户体验和安全造成严重影响。
三、防御 CSRF 攻击
1.验证码
在用户进行关键操作时,要求输入验证码是一种有效的防御 CSRF 攻击的手段。由于验证码只有用户可见,攻击者无法获取并伪造,这就确保了请求是用户的真实操作。
例如,在进行转账操作时,银行网站要求用户输入图形验证码或短信验证码。用户需要在页面上查看并输入验证码,只有输入正确才能完成转账。然而,频繁要求用户输入验证码会极大地影响用户体验,导致用户在使用过程中感到繁琐和不便,所以在实际应用中,需要在安全性和用户体验之间找到平衡,不能过度依赖验证码。
2.Referer 校验
通过检查 HTTP 请求中的 Referer 字段,Web 应用可以判断请求的来源是否合法。正常情况下,用户在目标网站内部进行操作时,请求的 Referer 应该是目标网站的内部页面。若 Referer 字段显示请求来自恶意网站,那么服务器可以拒绝该请求。
例如,用户在example.com进行修改个人信息的操作,该操作的请求 Referer 应该是example.com的相关页面,如个人设置页面。如果服务器接收到的请求 Referer 为MALICIOUS.COM,则很可能是 CSRF 攻击,服务器可直接拒绝。但需要注意的是,Referer 字段并非完全可靠。一方面,攻击者可以通过技术手段伪造 Referer 字段,使其看起来像是来自合法的来源;另一方面,在某些特殊情况下,如从 HTTPS 页面跳转到 HTTP 页面时,由于安全策略等原因,Referer 字段可能为空。因此,仅依靠 Referer 校验并不能完全确保应用免受 CSRF 攻击,它只能作为一种辅助的防御手段。
3.Anti - CSRF Token
原理
Anti - CSRF Token 是目前防御 CSRF 攻击最为常用且有效的方法之一。在用户登录或页面加载时,服务器会生成一个随机的 Token,并将其存储在用户的 Session 中。同时,服务器通过隐藏表单字段或 HTTP 头的方式将 Token 发送给客户端。当客户端发起请求时,会将 Token 包含在请求中。服务器在接收到请求后,会验证 Token 的有效性和一致性,即检查请求中的 Token 与存储在 Session 中的 Token 是否匹配。若两者不匹配,服务器将拒绝请求,从而有效阻止 CSRF 攻击。
使用原则
为了确保 Anti - CSRF Token 的有效性,需要遵循一些重要原则。首先,Token 要足够随机且难以预测,避免使用固定值或可猜测的值。
例如,使用高强度的加密算法生成 Token,保证其具有足够的长度和复杂度。其次,在不同页面或操作中,Token 应保持唯一性,防止攻击者通过复用 Token 来绕过防御机制。最后,服务器端要正确验证 Token,防止重放攻击等。例如,在验证 Token 后,及时将其从 Session 中移除或标记为已使用,确保同一个 Token 不会被多次使用。
示例
在 HTML 表单中添加一个隐藏的input字段来存储 Token 是常见的做法。例如:
<form action="http://example.com/do_something" method="post"><input type="hidden" name="csrf_token" value="随机生成的Token值"/><!-- 其他表单字段 --><input type="submit" value="提交"></form>
服务器端在处理请求时,会获取该 Token,并与存储在 Session 中的 Token 进行比对。以 Python 的 Flask 框架为例,代码如下:
from flask import Flask, request, sessionapp = Flask(__name__)app.secret_key = 'your_secret_key'@app.route('/generate_token')def generate_token():import secretstoken = secrets.token_hex(16)session['csrf_token'] = tokenreturn token@app.route('/do_something', methods=['POST'])def do_something():if 'csrf_token' not in session or 'csrf_token' not in request.form:return 'CSRF验证失败', 403if session['csrf_token'] != request.form['csrf_token']:return 'CSRF验证失败', 403# 处理正常业务逻辑return '操作成功'
在上述代码中,/generate_token路由用于生成 Token 并存储在 Session 中,/do_something路由在处理 POST 请求时,会验证请求中的 Token 与 Session 中的 Token 是否一致,若一致则处理正常业务逻辑,否则返回 CSRF 验证失败的提示。
四、相关要点
1.与 XSS 的关联
CSRF 和 XSS 作为 Web 安全中的两大重要问题,它们之间存在着紧密的关联。XSS 攻击可用于获取用户的 Cookie 等敏感信息,而这些信息正是 CSRF 攻击所依赖的。攻击者通过 XSS 将恶意脚本注入到用户浏览的页面中,当用户访问该页面时,恶意脚本会获取用户的 Cookie,并将其发送给攻击者。攻击者利用获取到的 Cookie,结合 CSRF 攻击手段,就可以以用户的身份在目标网站执行各种操作。另一方面,CSRF 攻击也可能结合 XSS 来扩大攻击范围和影响。例如,通过 CSRF 攻击在用户页面植入 XSS 代码,当其他用户访问该页面时,就会触发 XSS 攻击,进一步传播恶意代码,造成更大的危害。
2.常见应用场景
许多 Web 应用都存在 CSRF 风险,尤其是涉及用户资金交易、个人信息修改、关注点赞等操作的功能。在金融类应用中,若存在 CSRF 漏洞,攻击者可能诱导用户在已登录状态下执行转账操作,导致用户资金损失。在社交平台上,攻击者可能利用 CSRF 漏洞,以用户的名义发布不良信息、修改用户个人资料或关注恶意账号等。因此,开发者在开发 Web 应用时,应高度重视这些关键功能的安全性,采取有效的防御措施,防止 CSRF 攻击的发生。
3.不同框架的应对
不同的 Web 开发框架,如 Flask、Django、Spring 等,通常都提供了相应的 CSRF 防护机制或扩展。以 Flask 框架为例,可通过Flask - WTF扩展来实现 CSRF 防护。使用时,只需在应用中初始化扩展,并在表单中添加 CSRF 保护字段即可。例如:
from flask import Flaskfrom flask_wtf.csrf import CSRFProtectapp = Flask(__name__)app.secret_key = 'your_secret_key'csrf = CSRFProtect(app)# 其他路由和视图函数
在 HTML 表单中,使用Flask - WTF生成 CSRF 保护字段:
{{ form.csrf_token }}
通过这种方式,开发者可以利用框架提供的工具轻松增强应用的安全性。但需要注意的是,在使用这些工具时,要正确配置和使用,仔细阅读框架文档,避免因配置不当而出现漏洞,确保应用能够有效抵御 CSRF 攻击。
总结
跨站请求伪造(CSRF)是一个复杂且不断演变的 Web 安全问题。无论是开发者、安全研究人员还是普通用户,都需要持续关注其发展动态。开发者要将安全意识贯穿于整个开发周期,不仅要熟练运用现有的防御技术,还要积极探索新的安全防护手段;安全研究人员需深入研究攻击者的新手法,为安全防护提供理论支持;而普通用户则要提高自身的安全意识,谨慎点击不明链接,避免访问可疑网站。只有各方共同努力,才能在这场与 CSRF 攻击的较量中取得胜利,保障 Web 应用的安全和用户的权益。
喜欢就点点赞和评论关注一起进步呗
相关文章:
《白帽子讲 Web 安全》之跨站请求伪造
引言 在数字化时代,网络已深度融入人们生活的方方面面,Web 应用如雨后春笋般蓬勃发展,为人们提供着便捷高效的服务。然而,繁荣的背后却潜藏着诸多安全隐患,跨站请求伪造(CSRF)便是其中极为隐蔽…...
C++20:make_shared_for_overwrite与make_unique_for_overwrite
文章目录 一、背景与动机二、std::make_shared_for_overwrite2.1 语法与用法2.2 优势 三、std::make_unique_for_overwrite3.1 语法与用法3.2 优势 四、应用场景4.1 高性能计算4.2 大型对象管理4.3 实时系统 五、总结 C20 引入了两个新的标准库函数: std::make_sha…...
北斗导航 | 改进奇偶矢量法的接收机自主完好性监测算法原理,公式,应用,RAIM算法研究综述,matlab代码
改进奇偶矢量法的接收机自主完好性监测算法研究 摘要 接收机自主完好性监测(RAIM)是保障全球导航卫星系统(GNSS)安全性的核心技术。针对传统奇偶矢量法在噪声敏感性、多故障隔离能力上的缺陷,本文提出一种基于加权奇偶空间与动态阈值的改进算法。通过引入观测值权重矩阵重…...
【React】基础版React + Redux实现教程,自定义redux库,Redux Toolkit教程
本项目是一个在react中,使用 redux 管理状态的基础版实现教程,用简单的案例练习redux的使用,旨在帮助学习 redux 的状态管理机制,包括 store、action、reducer、dispatch 等核心概念。 项目地址:https://github.com/Yv…...
onlyoffice实现office文件在线编辑保存
一、简介 onlyoffice是开源的在线文档编辑软件,支持主流的office格式,可实现文档在线编辑保存,多人协作编辑等场景,是目前我用过的功能最完善且强大的在线office编辑软件; 二、安装onlyoffice 这里仅介绍docker安装 简单运行查看sudo docker run -i -t -d -p 80:80 --…...
Transformer革命:人工智能如何突破语言理解的边界
Transformer革命:人工智能如何突破语言理解的边界? 当你在手机输入法中打出"苹果"时,系统是否知道你要输入水果还是手机品牌?这个看似简单的选择,背后隐藏着自然语言处理领域二十年来最深刻的变革。2017年谷…...
禅道品牌全面战略升级:开创项目管理国产化替代新格局
2025年,禅道软件完成企业品牌战略深度升级。此次升级,从产品力、服务力到生态圈构建等方面进行了全面优化,以更智慧的解决方案、更开放的生态布局,更安全的国产化解决方案,助力企业实现从“工具应用”到“价值创造”的…...
软件项目管理课程之第4讲:软件需求管理
讲授内容 项目案例 软件需求管理的基本概念 软件需求开发 软件需求管理 项目案例 案例背景:小王作为软件项目负责人,带领团队开展需求调查工作,但在需求分析和后续开发过程中出现了一系列问题。 问题表现: 项目规模庞大&…...
java基础知识和语法
1.类的信息加载完成后,会自动调用静态代码块,可以完成静态属性的初始化功能 对象准备创建时,也会自动调用代码块,但不是静态的; public class java_3_24 {public static void main(String[] args) {new User08();}} …...
横扫SQL面试——事件流处理(峰值统计)问题
横扫SQL面试 📌 事件流处理(峰值统计)问题 “会议室预定冲突怎么查? 🔍 服务器瞬时负载如何算?🎢 健身房的‘人挤人’高峰究竟出现在几点?🏃♂️” 这些看似毫不相干…...
如何降低频谱分析仪的底噪
测量微小信号的时候,底噪可能会淹没有用的信号:(如下图,底噪为-60dB) 如何降低底噪: 1.分辨率带宽RBW设置小一点,可以减小信号的底噪 2.减小衰减器(频谱分析仪底噪的功率随着输入衰…...
C语言基础知识09---文件操作
目录 文件操作 1.1 文件操作 1.2 文件操作的数据传输形式 1.3 文件操作的分类 1.4 文件存储格式 1.5 文件流指针 1.6 函数名:fopen() 1.7 函数名:fclose() 1.8 函数名:fprintf() 1.9 函数名:fscanf() 1.10 函数名&…...
GRS认证的主要步骤是什么?
GRS认证的具体步骤,是一个严谨而系统的过程,旨在确保产品从原料来源到最终消费的每一个环节都符合全球回收标准(Global Recycle Standard,简称GRS)的严格要求。 首先,企业需要向GRS认证机构提交申请&#…...
探究 CSS 如何在HTML中工作
2025/3/28 向全栈工程师迈进! 一、CSS的作用 简单一句话——美化网页 <p>Lets use:<span>Cascading</span><span>Style</span><span>Sheets</span> </p> 对于如上代码来说,其显示效果如下࿱…...
软件工程面试题(七)
1、DAO设计模式及DELEGATE模式 DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式,其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active Domain Object 模式实现了业务数据的对象化封装,一般我们将这两…...
AfxMessageBox()如何显示string字符串
书籍:《Visual C 2017从入门到精通》的2.7 字符串 环境:visual studio 2022 内容:几个字符串类型->(将单字节char*转换为宽字节wchar_t *) 在 MFC 中,AfxMessageBox 默认支持显示 CString 或宽字符字符…...
基于 kubekey -实现懒人一键部署K8S集群
基于 kubekey -实现懒人一键部署K8S集群 操作步骤 官网: https://kubesphere.io/zh/ 一、执行以下命令快速创建一个 Kubernetes 集群。 Master节点 如果您访问 GitHub/Googleapis 受限,请登录 Linux 主机,执行以下命令设置下载区域。 [roott…...
19款超级华丽动画的图片轮播HTML5+CSS3模板源码
大家好,我是分享源码和设计思想的程序媛, 今天给大家分享一个 19款超级华丽动画的图片轮播HTML5CSS3模板源码。 纯CSS3HTML5代码实现,没有任何其它杂乱的框架东西。 图片演示 1. 3D立方体轮播效果 2. 视差滚动轮播效果 3. 卡片堆叠轮播效果 4…...
第十六:redis 的 帖子投票要点
ZADD orders 100 order1 ZADD orders 200 order2 ZADD orders 300 order3 zadd myzset 100 nameorder // 添加一个有序集合 其中存储了用户的订单信息,每个订单用一个唯一的 ID 表示 ZSCORE myzset nameorder // myzset 是key nameorder 是成员ÿ…...
51c深度学习~合集4
我自己的原文哦~ https://blog.51cto.com/whaosoft/12327892 #robustlearn 本文提出了「鲁棒关键微调」,通过「微调」对抗训练模型的「非鲁棒关键性模块」,充分利用其冗余能力提升泛化性。 对抗训练(Adversarail Training)…...
解决Vmware 运行虚拟机Ubuntu22.04卡顿、终端打字延迟问题
亲测可用 打开虚拟机设置,关闭加速3D图形 (应该是显卡驱动的问题,不知道那个版本的驱动不会出现这个问题,所以干脆把加速关了)...
Arduino硬件控制开发基础资料
Arduino 的程序可以划分为三个主要部分:结构、变量(变量与常量)、函数。 结构部分 一、结构 1.1 setup() 1.2 loop() 二、结构控制 2.1 if 2.2 if...else 2.3 for 2.4 switch case 2.5 while 2.6 do... while 2.7 break 2.8 cont…...
地图项目入手学习
如果你目前对自己的地图项目实现原理不太了解,周末可以通过以下方法进行高效学习: ⸻ 第一步:梳理项目相关代码(3 小时) 目标:先大致了解你的地图项目代码,找到核心实现逻辑。 具体做法&…...
OpenCV图像处理:边缘检测
文章目录 前言一、什么是边缘检测?二、算法分类1、Sobel算子2、Scharr算子3、Canny边缘检测3.1 Canny检测的优点3.2 Canny 边缘检测分为 4 个部分3.2.1 、图像降噪3.2.2 、梯度计算3.2.3 、非极大值抑制3.2.4 、双阈值边界跟踪 4、算法比较 三、代码实现总结 前言 …...
性能测试~
1.什么是性能测试 1.什么是性能 就像这两个车一样,虽然都是代步工具,构造都是一样的,但是路虎的发动机要比捷达好.路虎的百米加速却是比捷达快的,我们就知道路虎的性能要比捷达好 . 那么什么是软件的性能呢?我们分析一下 2.常见的性能测试指标 2.1并发数 并发数是指在同一…...
pagehelper 分页插件使用说明
pom.xml:pageHelper坐标 <!--pageHelper坐标--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</version></dependency> 分…...
使用crypto-js进行DES加/解密
crypto-js 官方网站:https://github.com/brix/crypto-js 中文参考教程:前端加密JS库–CryptoJS 使用指南 在线加解密网站:https://www.mklab.cn/utils/des 首先要安装crypto-js库,根据自己使用的方式按照官方网站步骤进行即可。 …...
【图片识别Excel表格】批量将图片上的区域文字识别后保存为表格,基于WPF和阿里云的项目实战总结
一、项目背景 在信息处理和文档管理中,经常会遇到需要从大量图片中提取文字并进行整理的场景。例如,财务部门需要从大量报销票据中提取金额、日期等信息;法务部门需要从合同文档中提取关键条款;教育行业需要从试卷中提取学生的答题内容等。传统的手工处理方式不仅耗时长、…...
在 i.MX8MP 上用 C++ 调用豆包 AI 大模型实现图像问答
本文介绍了如何在 i.MX8MP 嵌入式平台上使用 C 调用豆包 AI 大模型(Doubao-vision-pro-32k)进行图像问答。我们将详细讲解代码实现的各个步骤,包括文件读取、Base64 编码、构造 JSON 请求体、使用 libcurl 进行 HTTP POST 请求以及解析响应数…...
uni-app自动升级功能
效果图 一、VUE login.vue <template><view><view class"uni-common-mt"><view class"uni-flex uni-column"><view class"flex-item flex-item-V"><view class"logo"><image src"/st…...
线性回归 + 基础优化算法
线性回归 线性回归是机器学习最基础的模型,也是理解后续所有深度学习的基础。 线性模型可以看做是单层神经网络。 上述有个0.5是在求导的时候可以很方便的将2消去。 实际上,这里的数据样本受限很大,比如地球上房子就那么多,肯…...
MyBatis分页插件混用问题解析:IPage与PageHelper的冲突与解决
一、背景 在同时使用 MyBatis-Plus 的 IPage 分页 和 PageHelper 时,开发者可能会遇到以下两类问题: 分页结果异常:IPage 查询的 total 总条数返回 0,但实际数据正常。依赖冲突报错:启动时报错 Column.withColumnNam…...
4.Socket类、InetAddr类、Epoll类实现模块化
目录 1. InetAddr类 类定义 代码说明 类实现 2.Socket类 类定义 类实现 3. Epoll类 类定义 构造与析构函数 方法实现 类实现 4. 使用模块化设计 示例使用(main.cpp) 5. 运行程序 随着程序复杂度的增加,单一的面向过程的代码会变得难以理…...
19 python 模块
在办公室的日常工作中,我们常常会用到各种各样的工具,像计算器用于计算数据、打印机用来打印文件、订书机将纸张装订成册等。这些工具会被反复使用,而且不同的工具具有不同的功能。 一、模块的定义 在 Python 里,模块就如同一个…...
医疗智能体通信整合-大模型训练中沟通优化策略研究
一、引言:医疗模型训练的沟通困境 1.1 医疗 AI 发展背景 在数智化浪潮的推动下,医疗 AI 正以前所未有的速度融入现代医疗体系。从智能影像诊断助力医生精准识别病灶,到基于大数据分析的个性化药物研发,医疗 AI 在提升医疗效率、改善医疗质量方面展现出巨大潜力。据相关数据…...
LearnOpenGL-笔记-其六
今天我们来聊一些更深入的东西: Depth Testing 在之前的学习过程中,我们有接触过深度缓冲,彼时的深度缓冲的意义就是可以让我们体现出深度的差异从而达到立体的效果,而现在我们将在深度缓冲的基础进一步扩展,进行深度…...
【商城实战(91)】安全审计与日志管理:为电商平台筑牢安全防线
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Windows 10更新失败解决方法
在我们使用 Windows 时的时候,很多时候遇到系统更新 重启之后却一直提示“我们无法完成更新,正在撤销更改” 这种情况非常烦人,但其实可以通过修改文件的方法解决,并且正常更新到最新版操作系统 01修改注册表 管理员身份运行注…...
【安当产品应用案例100集】042-基于安当KADP实现机密文件安全流转
一、客户需求 某集团公司客户,在系统业务流中,存在大量的内部文件流转的需求。内部业务文件有不同的安全密级,最初在文件流转时,公司内部规定点对点的文件传输,要使用加密工具加密后再发给需要的一方。这种方式虽然能…...
【网络】Socket套接字
目录 一、端口号 二、初识TCP/UDP协议 三、网络字节序 3.1 概念 3.2 常用API 四、Socket套接字 4.1 概念 4.2 常用API (1)socket (2)bind sockaddr结构 (3)listen (4)a…...
蓝桥杯[每日一题] 真题:连连看
题目描述 小蓝正在和朋友们玩一种新的连连看游戏。在一个 n m 的矩形网格中,每个格子中都有一个整数,第 i 行第 j 列上的整数为 Ai, j 。玩家需要在这个网格中寻找一对格子 (a, b) − (c, d) 使得这两个格子中的整数 Aa,b 和 Ac,d 相等,且它…...
新手SEO优化实战快速入门
内容概要 对于SEO新手而言,系统化掌握基础逻辑与实操路径是快速入门的关键。本指南以站内优化为切入点,从网站结构、URL设计到内链布局,逐层拆解搜索引擎友好的技术框架;同时聚焦关键词挖掘与内容策略,结合工具使用与…...
Android面试总结之Glide源码级理解
当你的图片列表在低端机上白屏3秒、高端机因内存浪费导致FPS腰斩时,根源往往藏在Glide的内存分配僵化、磁盘混存、网络加载无优先级三大致命缺陷中。 本文从阿里P8级缓存改造方案出发,结合Glide源码实现动态内存扩容、磁盘冷热分区、智能预加载等黑科技&…...
基于类型属性的重载
算法重载 在一个泛型算法中引入更为特化的变体,这种设计和优化方式称为算法特化。之所以需要算法特化,原因有二: 针对特定类型使用更加合理的实现,对于const char *,less的第二个实现更加合理 template <typename…...
对称加密算法和非对称加密算法
在这个互联网普及的时代,在不同终端对敏感甚至机密数据进行传输是非常常见的场景,但是如何保证数据传输过程的安全性和高效性是一个值得深入探讨的问题。 为此,伟大的人类研究出了多种加密算法,我们可以大致将其分为两类…...
工程数字建造管理系统平台有哪些?好的数字建造管理系统推荐
一、什么是工程数字建造管理系统平台? 工程数字建造管理系统平台是一种集成了先进信息技术(如云计算、大数据、物联网等)的综合性管理工具,它旨在通过数字化手段提升工程建造全过程的管理效率和决策水平。这一平台不仅覆盖了工程…...
CMake ERROR: arm-none-eabi-gcc is not able to compile a simple test program.
用 cmake 构建 STM32 工程问题【已解决】 环境信息 os: ubuntu22.04gcc: arm-none-eabi-gcc (Arm GNU Toolchain 13.2.rel1 (Build arm-13.7)) 13.2.1 20231009cmake: cmake version 3.22.1ninja: 1.10.1 问题 log [main] 正在配置项目: Olidy [driver] 删除 /home/pomegr…...
容器主机CPU使用率突增问题一则
关键词 LINUX、文件系统crontab 、mlocate根目录使用率 There are many things that can not be broken! 如果觉得本文对你有帮助,欢迎点赞、收藏、评论! 一、问题现象 业务一台容器服务器,近期经常收到cpu不定期抖动告警&#x…...
CTFshow【命令执行】web29-web40 做题笔记
web29----过滤关键字 正则匹配,过滤flag,可以使用通配符绕过 先查看目录 使用通配符?查看flag 点击查看源代码 web30---过滤函数和关键字 看到过滤了system执行系统命令和flag,php关键字 找一个与其功能差不多的执行函数passthr…...
L2正则化:优化模型的平滑之道
常见的正则化方法1. **L1正则化(Lasso)**1.1基本原理1.2特点1.3数学推导1.4参数更新1.5选择合适的正则化系数1.6优点1.7缺点1.8实际应用中的注意事项1.9示例 2. **L2正则化(Ridge)**L2正则化的定义L2正则化如何防止过拟合1. **限制…...