PHP Jquery下载文件时如何加密url

时间:2014-11-06 12:13:39

标签: php jquery ajax encryption

我有这段代码:

$(li.AandCattachment.a download).click(function() {
$('#down').val($(this());

location.href('path/to/file?=' + $('#down').val());

}

但是我需要对网址进行加密以使其受到保护,并且不能被其他用户复制并通过复制文件的网址并逐个更改网址来查看所有文件。

你可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您可以将文件放在webroot之外,因此它们不能直接使用,然后通过php提供。在这个例子中,我使用关联数组将“随机”字符串映射到实际文件,因此不能简单地猜到文件名:

//download.php
$pathmap=[
    'hkd654gk'=>'../file1.jpg',
    'k735hs87'=>'../file2.jpg',
    'qwcv13v5'=>'../file3.jpg',
    ];

$securepath = isset($_GET['path'])?$_GET['path']:'';
if(!isset($pathmap[$securepath]))
    die('file not found');
header('Content-Type: image/jpeg');
readfile($pathmap[$securepath]);

要访问file1,url将是:

example.com/download.php?path=hkd654gk

答案 1 :(得分:0)

您想要实现的目标不仅涉及客户端代码,还涉及服务器端代码......

我没有给你100%的解决方案,你将不得不做一些额外的工作(你将需要一种机制来验证我自己无法猜测的网址,而不知道你如何验证用户),但这将指向你顺便说一句:

制作一个PHP文件以这种方式处理文件下载

$crypted_url = $_GET["url_to_file_encripted_somehow"];

$file_path = get_file_path_from_crypted_url($crypted_url);

if ( $file_path === false ){
    include "403.html";
    die;
}

$filename = "whatever";

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename.".pathinfo($file_path, PATHINFO_EXTENSION));
echo readfile($documento->link_archivo());

如果您解释要用于验证用户的机制,我可能会提供进一步的帮助。