如果密码正确,则无需重定向即可下载文件


Download file without redirect if correct password

在我的网站的管理面板上,我有一个数据库所有自动生成的备份文件的列表,用户可以单击这些文件从中下载任何这些文件。但是,为了增加安全性,我想实现一个文本字段,用户必须在其中输入特殊的PIN码才能下载备份文件;喜欢这个:

<input type="password" placeholder="PIN Code" name="pin" />
<button class="btn btn-primary">Download</button>

首先,我想在用户单击按钮并通过 Ajax 调用一个检查密码(以及可能的任何反泛洪措施)的 php 脚本时触发一个事件。如果脚本未生成任何错误,它将返回"OK"并开始下载。

但是我最近才开始使用Ajax,似乎Ajax无法下载文件。将用户重定向到路径不起作用,因为目录具有 chmod 770。

所以我的问题是,如何在保持安全性的同时做到这一点,而不必重定向/刷新页面?

谢谢。

我想我不明白为什么你不能使用重定向,但请尝试从 php 脚本提供文件

例如,如果下载链接位于/downloads.php 上,请将表单提交回自身(action="/downloads.php" method="POST"),如果图钉正确,则用户下载文件并返回到上一页。如果不正确,它的作用类似于页面刷新。

<?php
if (isset($_POST['pin']) && isset($_POST['filename']) && check_pin($_POST['pin'])) {
    header('Content-Type','application/sql');
    header('Content-Disposition','attachment; filename="' . $filename ."');
    print file_get_contents($filename);
}
else {
// the rest of your page
}
?>

*请原谅我的代码,自从我上次使用 php 以来已经有几年了,因此它可能有错误。