在我的网站的管理面板上,我有一个数据库所有自动生成的备份文件的列表,用户可以单击这些文件从中下载任何这些文件。但是,为了增加安全性,我想实现一个文本字段,用户必须在其中输入特殊的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 以来已经有几年了,因此它可能有错误。