此受密码保护的下载脚本是否安全?

时间:2018-02-27 13:38:43

标签: javascript php jquery mysql security

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

我的想法是将文件下载到一个名字很长的文件夹中。这个foldername是一个md5哈希,它是以前的密码。

喜欢:http://www.examlpe.com/098f6bcd4621d373cade4e832627b4f6/my_file.zip

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

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

现在我从两个md5哈希("用户输入哈希"和#34;数据库哈希")制作另一个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,他能够获得文件,但这不是真正的秘密。它应该只保护文件以便(源代码查看)用户下载它。

1 个答案:

答案 0 :(得分:1)

在我的项目中,我通常使用某种中间人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;
}
?>
混淆总是好的,但绝不应该只在客户端保护资源。

编辑: 很抱歉简短的回答,它只显示如何通过脚本等代理服务资源内容。在授权过程中,可以使用会话,或者如果是跨域请求,则应该发送授权令牌,例如“授权”,“承载者MY-SECRET-TOKEN”和“#39; Bearer MY-SECRET-TOKEN&#39;并在服务器上验证。我在大学网站上使用JWT作为资源库。

问题的确切答案:不,脚本不安全。