download.php如何知道从哪里获得“ title”?

时间:2018-07-12 23:07:29

标签: php html security download filepath

我不太确定如何表达这个问题。我正在别人建的网站上工作,我需要向安全的音频下载页面添加新链接。我想我可以复制并粘贴链接的代码,然后放入正确的文件路径,但这没有用,我也不知道为什么。

这是下载链接的代码:

</p><p>Download <strong><a href="http://www.*website*.com/cds/downloads/old_file/<? echo $key; ?>/">old_display_title</a></strong><br />

当前,下载链接在文件路径的末尾回显一个散列的$ key,以确保真实文件的安全:

$key = substr(uniqid(md5(stuff to hash), 0, 12); 

我复制了一个有效的链接,只是用新的文件名“ audio”替换了old_file和old_display_title。我要下载的实际文件是audio-4jf30m03.mp3,但是出于安全性考虑,尚未引用实际文件名。

仅进行了这些更改,它就不会下载,而是只会加载一个404,说明/ downloads / audio / $ key(该值,实际上不是“ $ key”)不存在...

通常,当一个人单击链接时,它会打开一个新标签页达一秒钟,然后仍然像往常一样启动下载,我怀疑是因为/ downloads文件夹中download.php文件的这一部分:

$title = trim(eregi_replace("[^a-z]", '', $_GET['title']));

$realfilename = $title . "-4jf30m03.mp3";
$fakefilename = $title . ".mp3";

然后$ fakefilename用于标头(content.disposition:附件; filename =''),这样用户就不会获得真实的文件名,然后$ realfilename才是实际下载的文件。

我认为$ title是出问题的地方,但是我真的不知道。我只是不明白为什么代码相同时一个文件为什么起作用,而另一个文件却不起作用,并且它们都保存在完全相同的位置和完全相同的方式。

以某种方式,download.php知道何时获取$ key并将其与真实文件相关联,并且它针对当前存在的文件而不是我添加的文件进行处理。

PS。我对这一切仍然很陌生。抱歉,如果问题很长,我只是想详尽。

1 个答案:

答案 0 :(得分:0)

从@Jakumi的评论中了解到这一点。

正在发生URL重写魔术。在.htaccess文件中,有一个RewriteRule,其中包含/ filename / $ key并将其变成/download.php?id=$2&title=$1。

只需在适当的位置添加“音频”即可解决该问题,并允许重写将其作为标题下载到download.php。