Javascript 此受密码保护的下载脚本安全吗?

Javascript 此受密码保护的下载脚本安全吗?,javascript,php,jquery,mysql,security,Javascript,Php,Jquery,Mysql,Security,我开发了一个上传脚本,可以设置密码。 现在我想知道,它对查看源代码的用户有多安全 我的想法是把要下载的文件放在一个长名称的文件夹中。此foldername是一个md5哈希,它是以前的密码 比如: 现在,用户可以在我的网站上输入一个密码到输入字段中,jquery脚本从中生成md5哈希 我的foldername md5哈希来自mysql数据库 现在,我从md5散列(“用户输入散列”和“数据库散列”)中创建另一个md5散列,并对两者进行比较。如果它们相等,脚本将使用来自用户输入的jquery md5散

我开发了一个上传脚本,可以设置密码。 现在我想知道,它对查看源代码的用户有多安全

我的想法是把要下载的文件放在一个长名称的文件夹中。此foldername是一个md5哈希,它是以前的密码

比如:

现在,用户可以在我的网站上输入一个密码到输入字段中,jquery脚本从中生成md5哈希

我的foldername md5哈希来自mysql数据库

现在,我从md5散列(“用户输入散列”和“数据库散列”)中创建另一个md5散列,并对两者进行比较。如果它们相等,脚本将使用来自用户输入的jquery md5散列显示要下载的受保护文件的路径

window.jQuery.("#my_id").click(function() {
var inputPassword = //input value of password field "e.g.: test";
Password = md5(inputPassword); //is 098f6bcd4621d373cade4e832627b4f6
md5_Password = md5(Password) //is fb469d7ef430b0baf0cab6c436e70375

//Compare#####
if (md5_Password == 'fb469d7ef430b0baf0cab6c436e70375') //hash from the mysql database
{
  //show the Link 
  //http://www.examlpe.com/ + Password + /my_file.zip
}

});

我知道,如果有人知道foldername,他可以得到文件,但这不是真正的秘密。它应该只保护(看起来像源代码的)用户不下载该文件。

在我的项目中,我通常使用某种中间人PHP文件读取器,并将所有合法的资源下载请求重定向到该文件。基本示例如下所示:

<?php
$file = $_GET["file"];
//check if user is allowed to access the file using your app logic
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>

如果这些都是在客户端完成的,那么它一点也不安全。我只需查看源代码,获取URL,然后将其输入到我的浏览器中。我会将文件放在公共区域之外,并使用标题下载文件并隐藏其位置。所有这些。此外,如今MD5并不难被暴力破解,即使源代码对任何想要查看的人都不可见。客户端代码永远不安全。如果涉及到安全性,就用PHP做点什么。那么呢?这样,即使我不知道手写密码,也可以访问文档。我可以从代码中选择它并将其附加到URL。我可以完全绕过你的代码。双MD5哈希也不比单MD5哈希更安全。为什么我觉得这容易受到LFI攻击?应该注意,这不包括任何实际的安全性。此处还应执行密码检查。并且该文件应存储在脱机位置。GET参数可能应该是一个文档ID,它在数据库中查找以获得真实的文件路径,这样就可以解释重复/多个文件夹等。所以人们不能去嗅探文件名。但这是一个解决方案的开始。