如何创建临时URL以防止在PHP中进行链接?

时间:2009-02-11 04:40:46

标签: php

我希望建立一个简单的上传网站,在输入验证码后会生成视频文件的临时URL。我需要保护文件的真实位置,因此不能直接进行热链接。基于时间的URL,在x分钟后到期似乎是最好的选择,但我不确定实际的实现。

任何提示?

5 个答案:

答案 0 :(得分:5)

将您的网址设为:

http://myvid.com/video?id=1&timestamp=12341561234&hash=1203941h23jk479sdf87sdf

其中timestamp是unix时间戳,而hash是md5哈希,例如,附加到服务器上的秘密字符串的时间戳。

然后,当您播放该视频时,检查时间戳字段是否有效(使用散列),然后检查时间戳的年龄。

答案 1 :(得分:3)

Yegor,他们使用Mod Rewrite。所以有人进来的时候 www.domain.com/video/1234567890/theLongHashCode 你在.htaccess中写道,网址应该被视为video.php?timestamp = 12341561234& hash = 1203941h23jk479sdf87sdf

这样可以防止显示实际网址。

mod重写的一些来源:http://www.modrewrite.com/

考虑到你在Apache上启用了mod_rewrite模块,你需要输入.htaccess文件:

RewriteEngine On
RewriteRule ^video/([0-9]+)/(.*)  video.php?timestamp=$1&hash=$2

这只需要2个值:timestamp和hash。视频ID未发送。我甚至不会发送时间戳。对于临时URL,我只生成一个哈希,将其与时间戳一起存储在数据库中。所以当有人访问网址时,我会从数据库中查找哈希值。如果存在哈希,那么我将数据库中的时间戳与当前时间进行比较,如果它在时间限制内,则该URL被认为是有效的,否则它是无效的并写入页面“此链接已过期”。

所以我会把网址看起来像: http://hsbsitez.com/video/thehashcodehere

使用以下.htaccess文件来解释该url。

RewriteEngine On
RewriteRule ^video/(.*)  video.php?hash=$1  

其中video.php是检查数据库中是否存在哈希的文件。

答案 2 :(得分:1)

header('Content-Type: application/force-download');

$fileee = 'filename.zip';
$file_Location = "/..yourfolder/" . $fileee;

header('Content-Length:' . filesize($file_Location));
header("Content-Disposition: inline; filename=\"".$fileee."\"");

$file_Pointer = fopen($fileLocation,"rb");
fpassthru($file_Pointer);

答案 3 :(得分:0)

使用方法设置为PUT

的FORM

您是否考虑过使用带有PUT方法的表单?这正是PUT设计的一种情况 - 无法使用相同的URL来恢复页面。只需创建一个包含一些隐藏字段的简单表单,您就可以创建一个提交它的javascript链接。这样您就不必担心用户试图恢复链接或在历史记录中包含链接。

示例:

<form id="myform" method="put" action="viewimage.php">
<input type="hidden" name="id" value="uniquevalue" />
<input type="hidden" name="filename" value="foo.jpg" />

<a href="javascript:myFunctionToInvokeSumit()">Image foo.jpg</a>
</form>

从表面上看,没有人可以重新访问图像,而无需在典型用户之外进行一些HTTP魔术。但是,要进一步验证图像是否仅在单击后启动,您可以在会话中注册id并为其加上时间戳,然后检查查看图像时的时间戳。

答案 4 :(得分:0)

我建议不要通过php打印整个文件,因为它耗费资源(甚至 fpassthru )。 还有另一种选择 - 使用自己的脚本生成对temporary url =&gt; original url {{1}} {{1}}。 但应谨慎使用此选项。