【发布时间】:2012-10-04 16:21:33
【问题描述】:
考虑下面的代码
<?php
// warning: this code is unsafe and for demonstrational purposes only,
// do not use in a production environment
$filename = $_GET['filename'];
$extension = 'txt';
$path = '/absolute/path';
$fullFilename = sprintf('%s/%s.%s', $path, $filename, $extension);
echo file_get_contents($fullFilename);
我们都知道(至少我希望如此)预先设置绝对路径绝不是防止离开给定路径的充分方法 - 只需在查询字符串中插入一个或多个“../”即可到达文件系统上的任何路径。
我的问题是:与给定的示例类似,$_GET['filename'] 是否也可以通过绕过给定扩展后缀的方式进行操作,即 .txt 以外的文件是回响?我特别想到某些控制字符绕过附加的文件扩展名,就像../ 处理前缀一样。
我尝试在查询字符串中添加一些控制字符(例如用于删除的 ASCII 代码 127)或使用 &&、| 或 > 连接两个文件名,但都无济于事,我想知道是否存在完全有这种可能。
(顺便说一句,我想补充一点,这个问题并不是为了利用系统而提出的。这纯粹是我最近想到的一个假设性问题。)
【问题讨论】:
标签: php security code-injection