使用javascript用户名/密码提示下载

时间:2015-11-29 23:09:07

标签: javascript jquery html authentication

我在网站上托管某个资源,并且只允许将其下载到特定用户。

但是,我宁愿没有身份验证页面,只需提示输入用户名和密码(我会在上次请求时发送给用户)点击下载按钮。

link完全体现了我想要获得的东西。

我发现的所有文档都表明上述内容是不可能的,或者需要在网站上编写登录例程(我不关心,因为身份验证应仅用于下载):

如何获取上面发布的链接效果?

我认为客户端代码的结构应该是这样的,但不能填补空白:

客户(PSEUDO-CODE):

<a class="btn btn-large btn-primary" type="button" onclick="Download_funct()">
    <b>Click to download</b>
</a>

<script>
    function Download_funct() {

        // how to do this thing below is what I'm asking basically.
        username, pass = prompt("Insert Username and Pass");

        authenticated = $.ajax( here is my request to server with username and pass);

        if (authenticated == 1) {
            download;
        } else {
           alert("Wrong User / Pass. If you don't have login credentials send me an email to have them.");
        }
    }
</script>

2 个答案:

答案 0 :(得分:2)

您提供的链接可能使用htaccess authentication

您可以将所有可下载文件放在一个单独的服务器目录中,只要有人想从那里访问文件,就会弹出一个与您提供的示例完全相同的身份验证对话框。

(编辑:这是一个服务器配置,网站上没有javascript编程。)

答案 1 :(得分:1)

经过一天的研究,我能够回答我自己的问题,并提供与之相关的所有细节和细微差别。

<强>前提:

首先,我应该解决我对使用htaccessjavascript进行身份验证之间的区别的困惑。

  • .htaccess身份验证服务器端,基于Apache Web Server
  • javascript身份验证客户端,因此您无法使用它来阻止用户访问这些文件。

引自.htaccess deny all except allow javascript access as well

  

如果javascript可以访问文件,客户端也可以。

因此,对我的问题的简短回答是,您无法使用客户端脚本获取显示here的结果。

使用.htaccess的解决方案:

问题中发布的link - @grandchild指出 - 使用.htaccess身份验证。来自Apache Tutorial Web Page

  

.htaccess个文件(或“分布式配置文件”)提供了一种方法   在每个目录的基础上进行配置更改。一份文件,   包含一个或多个配置指令,放在一个   特定文档目录,指令适用于此   目录及其所有子目录。

这意味着使用.htaccess配置文件,您可以(在目录基础上)决定是否授予客户端访问包含.htaccess配置文件的目录中所有文件的权限。 注意:您也可以使用更精细的细节,但解释它不属于主题。

以下是要放在服务器上要防止直接访问的目录中的.htaccess文件的代码段:

AuthUserFile /home/user_name/htaccess/.htpasswd <- path to password file
AuthGroupFile /dev/null
AuthName "This will appear in the prompt to client"
AuthType Basic

<Limit GET>
require valid-user
</Limit>

在上面指出的路径中,您输入了以下.htpasswd文件:

test_user:$a23Tl82g5/yW9$fY84d0PkzV.WNF9w$%d-90

其中每一行代表一个有效的username:passwd对,密码是使用MD5算法生成的。 Link到您可以用来获取上述内容的网站。

PHP解决方案

来自@Herbert Van-Vliet的评论是正确但不完整的:

  

使用用户名和密码字段创建一个div,然后隐藏它。   然后在用户单击下载按钮时显示它。你的div可以   还包含一个包含更多代码等的按钮,如果有,则提供链接   凭据很好。但是ALL CHECKING应该在服务器端完成!

除非您确保资源无法直接下载,否则您可以执行建议但会获得虚假安全的确认为这与资源认证程序无关。

Block direct access to a file over http but allow php script access中解释了处理此解决方案的正确方法。

这是:

  1. 将您想要保留的文件放在Web根目录之外。

  2. 要仍然阻止对文件的HTTP请求,请添加阻止所有通信的.htaccess file

  3. 例如:

    Order deny,allow
    Deny from all
    
    1. 设置将对用户进行身份验证的PHP脚本(不是javascript)。您的Web服务器以及服务器端语言仍然可以读取它们,因为目录的本地权限(无论.htaccess权限)允许Web服务器读取和执行文件。