当前位置: 首页 > news >正文

114、【OS】【Nuttx】【周边】效果呈现方案解析:-print0 补充(下)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

接之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:-print0 补充(上)
【OS】【Nuttx】【周边】效果呈现方案解析:-print0 补充(中)
分析了带转义字符的文件名,以及 ANSI-C 引用语法,还有 ANSI-C,ASCII 与转义规则之间的关系,下面延伸下 -print0 的另一个话题:安全

-print0 补充

首先回到之前 blog
【OS】【Nuttx】【周边】效果呈现方案解析:-print0 选项
的思路,分析了命令

find ~/.vscode-server -path "*/swyddfa.esbonio/sphinx/html" -type d -print0 2>/dev/null

加上 -print0 可以把所有的文件路径都安全地找出来(用 \0 分隔),下面举个例子看下安全和不安全的处理方法

接之前的 blog
【OS】【Nuttx】【周边】效果呈现方案解析:-print0 补充(上)
假设现在 Bash 环境上已经创建了两个文件
在这里插入图片描述
下面在终端中输入处理的安全模式,来看下效果

find . -name "*test*" -print0 | while IFS= read -r -d '' file; doecho "Processing: $file"
done

输出结果如下
在这里插入图片描述
可以看到:

  • 含换行符的文件 ‘./test‘$’\n’‘test.txt’ 被当作一个完整的文件名处理
  • 换行符 \n 是文件名的一部分,所以 echo 处理输出时也换行了,但换行后的内容并没有被单独处理(换行后的内容没有被 Processing)
  • 这就是安全的处理行为:不拆分,不丢失,完整处理

下面再对比下不安全的处理模式,终端中输入

find . -name "*test*" -print | while IFS= read -r file; doecho "Processing: $file"
done

输出结果如下
在这里插入图片描述
可以看到:

  • find -print 用换行符 \n 分隔文件名,但文件名 ‘./test‘$’\n’‘test.txt’ 本身包含换行符 \n
  • 此时 read 把这个异类当成了两个文件:./test,test.txt 处理(都有 Processing),导致一个文件被拆成两个,解析错误

安全漏洞

上面举的例子还都是 echo “Processing: $file” 等打印任务,没什么攻击性,最多处理任务失败,但并不是所有的处理都这么温和没有伤害性,如果有些处理比较激进,但又缺乏安全考虑,可能就会遭受到攻击

实际上,这些文件名中的特殊字符(如空格、换行符、制表符、- 开头等)也是 Shell 脚本中最常见,最隐蔽的安全漏洞来源,下面调整一下上面的不安全处理模式,加上危险操作

find . -name "*test*" -print | while IFS= read -r file; doecho "Processing: $file"rm "$file"
done

此时模拟黑客,创建一个恶意文件名混在正常的文件当中

touch test1.txt test2.txt $'test\nimportant.txt' important.txt

看看会发生什么,在执行命令前,先看下文件夹下内容
在这里插入图片描述

创建了 test1.txt,test2.txt,important.txt,并包含了恶意文件 $‘test\nimportant.txt’

上面经过调整的不安全处理脚本,本意是找到 test 相关的文件,给它删掉
在这里插入图片描述

但执行后,可以看到重要文件 important.txt 也被删掉了!只剩下恶意文件

现在换上安全的处理模式,同样执行相同的命令:将 test 相关的文件找到,并删除

find . -name "*test*" -print0 | while IFS= read -r -d '' file; doecho "Processing: $file"rm "$file"
done

在这里插入图片描述
可以看到恶意文件被删掉了,但重要文件 important.txt 还在

所以最后总结下,使用 -print0 不仅能避免处理失败,还可以预防恶意攻击,在编程的时候,还是要多注意防御式编程,写出安全,鲁棒性好的可靠代码!

-print0 先分析到这儿,后面继续分析呈现方案脚本

http://www.dtcms.com/a/352046.html

相关文章:

  • WeakAuras Lua Script ICC (BarneyICC) Simplified Chinese [Mini]
  • WeakAuras Lua Script (My Version)
  • 【数据分享】各地级市当年实际使用外商外资金额(2003-2021)-有缺失值
  • 【AI Agent三】工具使用设计模式
  • 系统设计(数据库/微服务)
  • 基于Python+AlphaBot 实现红外遥控且自动避障的嵌入式智能小车系统
  • Cursor 中文输出设置:繁体改为简体的方法
  • uniapp 页面favicon.ico文件不存在提示404问题解决
  • uniapp 自动升级-uni-upgrade-center
  • 家庭事务管理系统|基于java和vue的家庭事务管理系统设计与实现(源码+数据库+文档)
  • 【Python实战练习】用 Python与Pygame 打造完整的贪吃蛇小游戏
  • Elasticsearch中的设置refresh_interval
  • Linux SSH 密钥认证登录原理与配置指南
  • linux下的网络编程:TCP(传输控制协议)编程
  • 数据结构(C语言篇):(一)算法复杂度
  • 复盘一个诡异的Bug之FileNotFoundException
  • 数据结构的线性表 之 链表
  • 二、JVM 入门——(三)栈
  • 动手学深度学习(pytorch版):第七章节—现代卷积神经网络(2)使用块的网络(VGG)
  • MyBatis 流式查询详解
  • 使用 mcp-use 构建极简 Web 自动化测试智能体「喂饭教程」
  • 前端漏洞(上)- CORS漏洞
  • 静态HTML网页模板设计与实现
  • python基础-面向对象编程(OOP)
  • 我们来学mysql -- safe启动
  • Mysql——日志
  • 【45页PPT】制造行业数据资产运营平台需求方案(附下载方式)
  • 【科研绘图系列】R语言在海洋生态学中的应用:浮游植物糖类组成与溶解性有机碳的关系
  • OpenCV打开视频函数VideoCapture使用详解
  • Linux桌面主题的安装