一次惊心动魄的文件删除

简介: 今日在博客园看到了关于“印象最深的一个bug”的活动。回想起了从业早期的一个记忆犹新的BUG处理经历。

今日在博客园看到了关于“印象最深的一个bug”的活动。回想起了从业早期的一个记忆犹新的BUG处理经历。


那时自己和朋友建了一个移动端小工具的创业项目。后端使用的PHP,已经积累了一些付费用户。一天部分客户反应,他们在APP中生成的预览图形打不开了。


于是我开始排查这个问题。好家伙,何止这个用户的预览图不见了,所有用户的预览图都没了。我慌的一头汗。


由于迭代比较频繁,首先想到的是,是不是在发布产品时候误删除了资源。是不是服务器被黑了。


焦虑的对几种分析验证后,发现,都不是。直到我回到代码中,发现了这么一段:

public function delFile($file)
    {
            $url = "/mypath/" . $file;
            unlink($url);
    }


这个函数当file传空字符串会发生什么呢。

问题就在这里。会把整个mypath文件夹下的文件都删除了。

查询日志发现果然如此。

于是我给file加了非空断言。恢复用户的预览图片。


现在回忆起来,虽然这是一个低级的错误。但是仍然具有某种普遍性。

我给它总结为,使用条件删除资源时的范围风险。


比如下面这段spring boot 代码:

apiSensorConfigMapper.delete(new QueryWrapper<ApiSensorConfigEntity>()
.eq("sensor_mac_addr", mac));


当mac为空时候会发生什么呢。即使它不会删库,是不是也会觉得很危险。

好嘛,这种情况我必须加非空断言!


小小分享希望对大家有用。


吐槽一下活动要求要写500字。也不知道我这够不够。

相关文章
|
vr&ar
合成处理
合成处理
120 2
|
XML 数据格式
什么是 XML 命名空间?
【8月更文挑战第22天】
309 0
|
机器学习/深度学习 算法 Python
线性回归训练和预测代码详解
线性回归作为一种基础的回归分析方法,其核心思想和实现相对简单。本文通过详细的代码示例,介绍了线性回归模型的训练过程和预测函数的实现。希望能够帮助读者更好地理解和掌握这一基础算法。在实际应用中,线性回归可以作为一种初步的分析工具,为更复杂的模型提供参考和基础。
270 2
|
Java 数据处理 索引
JAVA中的插入操作:深入解析与实现
JAVA中的插入操作:深入解析与实现
338 1
|
存储 关系型数据库 Go
SOLID原理:用Golang的例子来解释
SOLID原理:用Golang的例子来解释
|
PHP
php删除字符串中的所有空格
php删除字符串中的所有空格
103 0
|
数据采集 芯片 开发者
[开源]DSLogic开源逻辑分析仪方案分享
[开源]DSLogic开源逻辑分析仪方案分享
2096 0
[开源]DSLogic开源逻辑分析仪方案分享
|
Java
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
JAVA输入任意一个数字,实现递减求和(计算任意整数n的和)
146 0
|
消息中间件 Kubernetes Dubbo
聊聊最新微服务架构技术栈选型
聊聊最新微服务架构技术栈选型
|
Shell Linux Go
《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用
《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用
335 0