我有一个PHP文件,其中有一个按钮,我想要下载一个文件,我想尝试使用AJAX调用PHP,(因为,我觉得它更安全),目前,我有以下代码......
<a onclick="download_file (<?= $row["id"]?>)">Download</a>
然后download_file的功能如下:
function download_file (fileid)
{
$.ajax
({
type: "POST",
url: 'download.php',
data: {id: fileid},
success: function(data)
{
window.location = 'download.php?link='+data;
}
});
}
现在这样做是因为它首先使用download.php
请求POST
fileid
请求(以便使位置更安全)与data
以便脚本获取来自数据库的文件的位置,并将其作为download.php
变量返回给AJAX脚本。
现在接下来是成功函数,GET
再次被调用,但这次是header("Cache-Control: private");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=".$file."");
header("Content-Transfer-Encoding: binary");
header("Content-Type: binary/octet-stream");
readfile ($link);
请求,然后搜索,重命名文件(在服务器中,它们有随机文件名) )然后下载... PHP的代码是:
public class InputHandler : MonoBehaviour
{
GameObject theObject;
public Command buttonA, buttonD;
public float acceleration, maxSpeed;
Movement moves;
void Awake()
{
theObject = gameObject;
moves = new Movement(theObject, acceleration, maxSpeed);
}
void Start()
{
buttonA = new MoveLeft(moves);
buttonD = new MoveRight(moves);
}
void Update()
{
HandleInput();
}
public void HandleInput()
{
if (Input.GetKey(KeyCode.A))
{
buttonA.Execute();
}
else if (Input.GetKey(KeyCode.D))
{
buttonD.Execute();
}
}
}
现在,一切都运行完美,我关心的是安全性,我想让文件更安全,我希望生成类似随机和唯一的下载链接的内容,并在下载完成后,链接被处理掉,但文件保持不变...我想到了一种方法来创建一个带有另一个地址的临时文件,并使用cron job来删除临时文件,但是这给出了一段时间的窗口,就像cron的特定时间间隔一样作业,下载链接将是静态的,这对网站不利......我希望单个链接仅对单个下载有效,(但链接应该在整个下载中,即RESUME SHOULD支持)。
或者如果可能的话,我也可以使用身份验证,就像用户登录一样,下载链接将处于活动状态但是一旦用户退出应用程序并打开下载链接,它就会提示用户登录或显示404错误...
我还想知道如何通过任何其他方法来提高相同的安全性......
答案 0 :(得分:2)
您需要创建一个代理,在调用download.php之前调用该代理。基本上,您的代理将执行以下操作:
success
回调函数。希望这会有所帮助!!