全局变量的危险.md

Discuz 3 大版本 RCE 漏洞横向对比:X3.4 配置写入 vs ML 版 Cookie 注入 vs 7.x 全局变量绕过 本文深度解析Discuz三大版本(X3.4、ML版、7.x)的远程代码执行漏洞(RCE),包括X3.4配置写入、ML版Cookie注入和7.x全局变量绕过漏洞。通过对比漏洞机理、攻击条件和防御方案,帮助开发者理解开源论坛系统的安全风险,并提供实用的修复建议和防护策略,提升Web应用安全性。 阅读详情

全局变量的危险

​ 对于新手来说,有一点非常讽刺,那就是当我们这些新手认为某些特性很有用而大量使用时,往往那些经验丰富的程序员都会非常谨慎的对待。像是全局变量,很多新手都非常喜欢(我倒是谈不上喜欢或讨厌),因为它的作用域是整个源文件,整个程序的各个部分都可以使用,于是我们就不需要将它们作为参数传递给函数。但是,就是因为程序中的各个部分都可以随意使用它,才使得全局变量存在很大的风险:假设这种情况,当我们的程序因为一个变量的错误赋值而出现问题时,如果是某个函数的局部变量,我们只需要在该函数的可见域里面找问题,但是如果是全局变量呢?那么问题就可能出现在整个程序中任何地方了。所以,最好的做法就是避免使用全局变量,如果我们的程序中有一个以上的全局变量,我们就需要认真斟酌,其中是否有些根本就不需要声明为全局变量呢。
这里又有一个新的疑问,好吧,我可以不使用全局变量,但是这样全局变量还有意义吗!!当然有,而且意义很大。全局变量最根本作用就是作为模块函数调用间的内部状态。什么是内部状态呢?举个例子,如果现在我正在写一个图形库,里面每条线都是从上一条线的结束处开始,那么我们就必须记录这个结束处作为内部状态的一部分。可以这样认为,内部状态就是各个函数调用间的通信,当这个状态因为某个函数而改变时,会使另一个函数调用开始发挥作用。局部变量根本不能作为内部状态,因为它的作用域只是它所声明的函数,函数一旦结束,它所存储的值也就丢失。但是,这时使用全局变量依然并不代表我们的程序是安全的,全局变量的危险依然存在。所以,这时我们就要使用static来修饰全局变量,使它的链接性变为内部。这种情况对于多模块的程序来说尤其重要,因为全局变量对于这个文件都是可见的,所以如果没有static,那么任何模块都可以使用,而且不能声明一个重名的变量,但是我们知道,实际开发中,是不同人进行不同模块的开发的,彼此间对于变量名的使用是不知道的,所以名称冲突是随时会发生的,尤其是对于同一个问题的开发。使用static,就可以避免这种冲突,因为static全局变量只对于所声明的模块是可见的,只可以在所声明的模块中使用,其他模块无法使用,所以其他模块是可以声明一个重名的变量的。虽然static在很多程序语言中的意义是说明对象是如何存储的,但是它的使用意义却更接近于private。
所以,如果我们使用一个全局变量,请在前面加上static,这样就可以避免一些我们不知道的错误。

别再乱用全局变量了!用FreeRTOS的xQueueSend/xQueueReceive实现安全高效的数据传递 本文探讨了在嵌入式系统中使用FreeRTOS的xQueueSend和xQueueReceive替代全局变量实现安全高效的数据传递。通过分析全局变量的风险,介绍消息队列的核心优势,并提供实战重构示例,帮助开发者避免数据竞争和系统耦合问题,提升多任务通信的可靠性和性能。 阅读详情

相关推荐

前端开发实战:JavaScript MD5哈希算法原理、应用与安全边界详解

哈希算法是计算机科学中用于数据完整性验证和指纹生成的基础技术,其核心原理是通过特定函数将任意长度输入映射为固定长度输出,具备确定性和雪崩效应。在工程实践中,哈希算法被广泛用于文件校验、数据去重和敏感信息脱敏等场景。MD5作为一种经典的哈希函数,因其计算速度快、实现简单,在前端开发中常用于文件上传校验和缓存Key生成等非安全关键场景。然而,MD5存在已知的碰撞漏洞,在涉及密码学强度的应用如数字签名时应避免使用,可考虑升级至SHA-256等更安全算法。本文聚焦JavaScript环境,详解MD5的实现原理、安全

weixin_33722405的博客 310

别再只把Jinja2当Flask模板了!用Python+Jinja2自动生成HTML报告和配置文件的保姆级教程

本文深入探讨Jinja2在Python自动化工作流中的工业级应用,突破其作为Flask模板引擎的传统认知。通过HTML报告生成、服务器配置管理等实战案例,展示如何利用Jinja2实现高效自动化,涵盖环境配置、性能优化、安全防护等最佳实践,帮助开发者解锁Python+Jinja2的全栈自动化潜能。

weixin_33739523的博客 585

Skills:AI时代的工作流操作系统与SKILL.md实战指南

Skills是AI原生时代下可复用、可组合、可声明式调用的原子化能力单元,其核心在于将隐性工作逻辑转化为机器可调度、可验证、可审计的结构化协议。它并非Prompt模板或脚本封装,而是通过SKILL.md这一跨平台元数据标准,实现输入契约、执行约束与输出规范的统一定义。技术价值体现在错误前移拦截、沙箱资源可控、多环境即插即用,广泛应用于自动化爬虫、PDF结构化解析、企业级Agent编排等场景。本文聚焦SKILL.md协议设计原理与TRAE Solo/Claude Code等主流平台的工程落地差异,直击inpu

Eric.Net的专栏 462

shell脚本基础.md

shell基础,shell脚本基础,循环

H_YANG__的博客 785

STM32F103ZE驱动PMW3901光流模块,从SPI配置到数据读取的完整避坑指南

本文详细解析了STM32F103ZE驱动PMW3901光流模块的全过程,从SPI配置、硬件连接到数据读取与处理,提供了完整的避坑指南。重点介绍了SPI参数配置、初始化序列优化、运动数据滤波等关键技巧,帮助开发者快速实现精准的光流检测。

weixin_42631411的博客 514

AutoCAD2014与ObjectARX开发环境搭建实战指南

本文提供了一份详细的AutoCAD2014与ObjectARX开发环境搭建实战指南。内容涵盖从AutoCAD2014、Visual Studio 2010及ObjectARX 2014 SDK的版本匹配与环境准备,到Wizard安装、编码问题解决、Visual Studio配置,并最终通过一个完整的绘图命令开发示例,手把手引导开发者创建并加载第一个可运行的ObjectARX插件,为后续深入开发奠定坚实基础。

weixin_28475533的博客 288

第二阶段上课笔记

week1

achangjiang123的博客 332

人工智能100问☞第5问:什么是AI三要素?

人工智能的核心三要素是​​数据、算法和算力​​,分别作为AI的“燃料”、“大脑”和“动力”,三者协同驱动智能系统的学习、推理与决策能力。

bjdx_001的博客 1992

全局变量猛于虎

一线研发之声:嵌入式C编程经验 之 全局变量猛于虎 http://blog.21ic.com/user1/6265/archives/2012/88466.html /********************************************************************************* * Filename: 一线研发之声:嵌入式C编程经验

yingyi_cn的专栏 1496

TTL转RS422(B)工业级转换模块设计:从原理到实战部署

在工业自动化与嵌入式系统中,串行通信是实现设备间数据交换的基础。其核心原理在于通过特定的电气标准与协议,将数据位序列化后进行传输。RS422作为一种差分平衡传输协议,相比常见的TTL电平,在抗共模干扰与远距离传输能力上具有显著的技术优势,这使其成为工业现场总线、楼宇自动化等对可靠性要求严苛场景的优选方案。要实现TTL设备与RS422网络的稳定互联,关键在于设计一个能够完成单端信号到差分信号高质量转换的硬件模块。这涉及到差分总线收发器芯片的选型、包含终端电阻与TVS二极管的保护电路设计,以及遵循差分走线规则的

weixin_29195615的博客 342

YOLOv11改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量

本文记录的是改进YOLOv11的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑与之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-IoU提出了一种关注边界框本身形状和尺度的边界框回归方法。

Limiiiing的博客 4596

全局变量弊端

@[TOC]全局变量的弊端 在没有操作系统概念之前,我个人写程序真的是全局变量满天飞,简直是内部变量都不想定义,想到一个变量,只要没有特别要求,不过脑子直接就是全局变量,感觉很好用,方便简单,其他模块需要使用的话直接extern过去,感觉美滋滋。 最近学习单片机FreeRTOS(软件开发一样适用)时候学到消息队列忽然意识到全局变量的危害性,现在我们写一个小工程可能都不在意,但是当我们写稍微大一点的工程的时候 必须 必须 必须 重视的一件事情,因为感觉重要所以单独写出来,方便给看到的朋友提个醒 下面是我这个章

maosql 1425

使用 YOLO26 的牙科全景X光片分析:从牙齿检测到疾病诊断

从数据预处理自动化、模型架构针对性优化到基于视觉特征的性能分析。它证明了在医学图像分析中,模型架构的进步(如YOLO26的特性)可以有效缓解数据不平衡和目标微小的问题,为临床自动化诊断提供了一个高效、可靠的解决方案。Python"""全局配置模块包含数据集路径、类别名称、论文复现参数、划分比例等常量"""import os# ==================== 路径配置 ====================

u012133341的博客 102

一个页面读完 40+ 个实时热点:newsnow 新闻聚合部署指南

newsnow 是一个把微博热搜、知乎热榜、GitHub Trending、Product Hunt 等 40 多个信息源抓进同一页面的新闻聚合工具。你不用注册账号、不用切换 App,打开页面就能按栏目刷实时热点,还能自己写抓取逻辑扩展新闻源。本文给出一条最短的本地部署路径,以及自定义源的写法。 [![newsnow 新闻聚合实时热点界面](https://raw.gitcode.com/Git

gitblog_00001的博客 966

YOLOv8科研探索:HAttention激活更多特征点,真心助你提升细粒度检测精度

如果你在集成中遇到问题,不妨从特征点激活阈值、多尺度融合的逻辑入手,一点点打磨——科研的突破,往往就藏在这些细致的尝试里。想象一下,普通模型可能只关注目标的“大块区域”,而HAttention能让模型同时捕捉到目标的“边缘”“纹理”等细粒度特征点,就像给模型装上了“显微镜”,再小的细节也逃不过它的“眼睛”。比如,小目标的细粒度特征点(如昆虫的触角)和大目标的整体特征点(如昆虫的身体)会被同时考虑,通过注意力权重的分配,让小细节融入全局理解,避免模型“只见树木不见森林”。HAttention通过。

FJN110的博客 80

PLC为西门子的S7-1200,舵机为 DS3218,PLC控制舵机旋转程序实现?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 999

MD与MT的区别

场景:当用户不需要静态链接运行时库的时候,然后所有的模块都采用-MD的时候,使用的是同一个堆,(看其他文章,如果是-MT的情况下,一个dll内部会有一个堆(_crtheap全局变量,_heap_init就会在每个模块里都被调用一次),如果是-MD情况下,整个进程只有一个堆(整个进程里只有运行时库里才有一份_crtheap全局变量,在crt的dll加载的时候调用一次_heap_init)多个堆存在着释放崩溃的危险,a堆申请需要a堆释放)不同的运行时库可能有不同的内存管理机制。MT/MTd(静态链接)

sinat_39426759的博客 1204

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

嵌入式代码中滥用全局变量的弊端及优化实践

嵌入式开发中滥用全局变量会带来数据篡改、并发竞争、内存浪费和测试困难等问题。本文通过代码示例分析了这些隐患,并提出了优化方案:1)模块化封装数据,提供受控访问接口;2)使用互斥锁保护多任务共享资源;3)将临时数据改为局部变量或动态内存;4)通过参数传递替代全局状态依赖。优化遵循最小作用域、单一职责和显式优于隐式原则,可提高代码的封装性、安全性和可测试性,特别适合资源受限的嵌入式系统开发。

嵌入式菜鸟,练习时长一坤年。 717

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

小心你的全局变量!--“悬挂式全局”设计方式小议

很多时候(似乎昨天还有人在QQ上问Delphi怎么定义全局变量...),很多人都喜欢用全局变量来保存一些数据, 这样可以随时随地的调用他们。这样看似方便(实际上也很方便),但这个时候你却为自己埋下了很深的隐患。全局,顾名思义就是在任何地方都可以访问到的,也是任何机制都可以修改或显示的(当然你可以对它加一些限制,但这些限制终归也是全局的),那么这个时候,它就成了一个不可控量。所谓不可控量简单的说

糖醋舌头 1412

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

别再乱用全局变量了!用FreeRTOS消息队列重构你的单片机代码(附性能对比)

本文探讨了在嵌入式开发中如何用FreeRTOS消息队列替代全局变量,解决数据一致性、临界区保护和架构耦合度问题。通过实战案例和性能对比,展示了消息队列在提升代码质量、降低维护成本方面的显著优势,特别适合智能家居控制器等复杂项目重构。

weixin_29224589的博客 355

php.ini三大危险变量审计--

第一个特性: safe_mode 在php 5.4.x之前的版本是没关的,,这里按xx牛的意思做个演示,咱们怎么利用? 1.首先我们新建一个cmd=cmd=cmd=_GET[‘cmd’];//获取系统cmd变量 然后放到web根目录下,执行 ppp.php?cmd=ipconfig 然后我们这里做一个开启安全模式: 可以看到页面是空白,没有接受到任何数据,原因是我们没获取到环境变量。 第二个特性: register_globals 全局变量 如果他是开启的,我们可以这样利用: if(isset(

qq_29437513的博客 173

KubeSphere 仓库中的 go.uber.org/atomic:Go 原子类型安全封装库完整指南

`go.uber.org/atomic` 是 Uber 开源的原子操作封装库,它在标准库 `sync/atomic` 的基础上,将原始类型包装为类型安全的原子对象,提供 `Load/Store/Add/Sub/CompareAndSwap` 等更易用、更不易出错的 API。本指南以 KubeSphere 仓库中随附的 [vendor/go.uber.org/atomic/README.md](ht

gitblog_00109的博客 770

PHP.INI安全设置相关防护——详细介绍

本次实验使用php一句话木马22<?php @eval($_POST[x]);?> 一、php的安全模式 php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如 system(),同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件进行操作,比如 /etc/passwd 但是默认的php.ini是没有打开安全模式的:safe_mode=off (PHP5.3将不再有安全模式) 默认情况下,使用system()函数 开启php安全模式,将safe_mode=

W小哥 3327

解锁pity高级功能:全局变量、参数提取与自定义脚本实战技巧

pity是一个功能强大的开源接口测试平台,通过全局变量、参数提取和自定义脚本等高级功能,能够帮助测试工程师构建更灵活、更智能的自动化测试场景。本文将详细介绍这些核心功能的实战应用技巧,让你轻松掌握pity的进阶用法。 ## 全局变量:跨用例数据共享的终极方案 全局变量是pity中实现跨用例数据共享的核心机制,通过集中管理环境相关的配置信息,显著提升测试用例的可维护性。 ### 全局变量的类型

gitblog_01056的博客 244

【PHP开发900个实用技巧】648.PHP配置安全:php.ini中你必须关闭的“危险开关”

在PHP开发中,服务器配置的安全性至关重要。错误的配置可能导致严重的安全漏洞,如变量覆盖攻击、敏感信息泄露、远程代码执行等。本文通过四个关键配置项,详细介绍了如何通过修改`php.ini`文件来加固PHP应用的安全性,确保服务器免受攻击。 首先,**register_globals:关闭变量潘多拉魔盒**部分揭示了`register_globals`配置项的危险性。该配置项允许通过URL参数直接注入全局变量,可能导致严重的安全漏洞。关闭`register_globals`可以有效防止变量覆盖攻击。 其次

812
上一篇: leetcode---反转整数
下一篇: ubuntu搜狗输入法的安装使用
Terminator1937
博客等级 码龄12年 5粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值