php隐藏下载链接

时间:2011-04-06 11:16:05

标签: php url hyperlink download hide

我正在寻找一个简单的PHP微型网站,允许下载我的一个乐队曲目以换取电子邮件地址。我知道我可以使用Bandcamp,但我想自己做;)

我发现了一个我喜欢的乐队中的微型网站,它确实是我想要的,所以我试着把它挑选成碎片。该网站是http://threetrappedtigers.heroku.com。该站点基本上可以让您输入您的电子邮件地址,然后必须将其放入数据库中(除非它在数据库中找到该电子邮件地址的匹配项)。

然后,您可以查看下载按钮并下载文件,而不会泄露文件的源URL。该按钮的href"download/",导致我假设下载目录中有一个index.php,它必须要求某种会话ID(可能是在提交您的电子邮件时设置)才能停止人们直接链接到它。然而,该文件还做了一些我不知道的工作,以掩盖链接。

我不理解的另一个方面是,在输入电子邮件的页面上有一个隐藏的输入,在提交电子邮件地址时提交随机authenticity_token。我无法理解为什么这也是必要的。

为这个可怕的具体问题道歉,但我一直试图整个早上解决这个问题,并且不能完全理解。

谢谢,

2 个答案:

答案 0 :(得分:1)

你可以看看它,因为它可以做你想要的,使用蛋糕或采取一些想法

http://book.cakephp.org/view/1094/Media-Views

https://github.com/cakephp/cakephp/blob/master/cake/libs/view/media.php

你可以在render()函数中看到它主要是关于设置正确的标题

答案 1 :(得分:1)

你可以做的是:

  1. 用户输入电子邮件地址
  2. 通过发送包含令牌的链接的电子邮件来验证(或不,取决于您的意愿)。即:http://myawesomband.com/downloadtrack.php?token=asd#% $ dhj123
  3. downloadtrack.php验证令牌并使用file_get_contents()加载示例曲目并将其作为下载提供(请参阅php.net网站上的特定标题)
  4. 优点是用户不知道文件的位置(最好将样本轨道放在webroot之外。

    [编辑] 对于隐藏的输入字段标记:这可能会混淆机器人和其他只会大量发布“电子邮件”字段的脚本。如果未发送令牌且与$_SESSION['token']值不匹配,则不处理请求。这是有效的,因为执行这类攻击的脚本通常不接受cookie,因此永远不会重新加载它们的$_SESSION数组。