php防止文件删除,php 删除文件或者目录, 安全性问题分析.

$datadir = './cache/attesavefile/';

$dbfile = '/a/b/c/d/242423.jpg'; // 这个路径通常在数据库,

unlink($datadir.$dbfile); // 删除之.

# 假如dbfile变量转化如下, 那问题就严重了.

$dbfile = '../../..//d/242423.jpg'; // 往上走了几层,

$dbfile = '/a/b/c/d/./../../index/index.php?242423.jpg'; // 被改变的文件名, 文件名成路径.

// 只要细心, 用户就可以伪装出各类路径来删除你的核心文件. 或者你会说, 数据库不可能保存进这种路径. 的确很少碰到, discuz的文件名是md5过滤的, 路径都是后期固定的, 但许多个人blog, 如wordpress, 附件路径就是保存在数据库. 这时你就应该担心这种bug的发生. 既然删除文件会有这问题, 那可想而知, rmdir也会有此问题.

$dirpath = './images/';

rmdir($datadir.$dirpath);

# 假如$dirpath变量转化如下,

$dirpath = './../../include/'; //上两层的include目录删除.

追究其发生的原因, 重点在于..号在路径中为上一层的意思, 这就让用户可以虚拟出任何的路径出来, 后果非常严重.

我们能够把 '.' 号过滤掉吧? 事实上是不可以的, dir.images 是个合格的目录命名. 你或者会说, 没有人会把这种非法的路径保存进数据库. 不会发生这种bug.

可或许我们应该想想, 假如它发生了, 你将如何来解决之?

// 原本是删除 ./a.images/目录结果.

$dirpath = './../../a.images/';

rmdir($datadir.$dirpath);

或许你能够帮我解决这个问题, 如何判断呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值