通过表单发送基本认证信息

时间:2010-12-16 12:01:53

标签: php authentication login basic-authentication

我正在使用当前使用基本身份验证对话框登录系统的网站,这是您进入此处时获得的对话类型:http://www.dur.ac.uk/vm.boatclub/password/index.php 我没有设置这个系统,也无法轻松/快速地解决它,但它确实有效。但问题是,对话框告诉您必须使用哪些登录信息(即用户名和密码组合),因此我想用表格替换它。我一直以为这是不可能的,但我想问一下。

是否可以设置一个HTML表单,将数据发送到服务器,使其以与使用此对话框相同的方式接受它?或者,是否可以设置一个PHP脚本,该脚本将采用普通表单数据并以某种方式将其传递给服务器,以便它登录?

编辑:在被告知这是基本身份验证后,我四处寻找并找到了一种有效的方法并让用户持续登录。但是,这在Internet Explorer中不起作用。解决方案只是将用户重定向到: http://username:password@www.dur.ac.uk/vm.boatclub/password/index.php 但是由于大约3年前的网络钓鱼使用,Internet Explorer将其删除了。有没有办法使用JavaScript来让浏览器以这种方式访问​​该网站?或者我只需要更改我的用户界面吗?

2 个答案:

答案 0 :(得分:11)

经过一番研究后,我发现了一种适用于Chrome和IE的方法,这就是我测试过的所有方法,但代码的逻辑并不表明它应该在任何地方都能破解。它基于这篇文章:

http://www.peej.co.uk/articles/http-auth-with-html-forms.html

这是深入的,但其关键在于 - 在表单提交中,您将AJAX请求发送到基本的经过身份验证的文件夹中。 AJAX请求可以接受基本身份验证的用户名和密码信息,并且一旦浏览器在该领域获得授权就进行了授权,即它将保持登录状态。前一篇文章是在纯JavaScript中进行的,所以要添加其他内容而不是简单地解释链接这里是一个使用jQuery的(希望相当透明)实现:

  $(document).ready(function()
  {
    $('#loginForm').submit(function()
    {
      var username = $('#usernameInput').val();
      var password = $('#passwordInput').val();

      $.ajax(
        {
          'password' : password,
          'username' : username,
          'url'      : 'http://www.website.com/basic-auth-file.php',
          'type'     : 'GET',
          'success'  : function(){ window.location = 'http://www.website.com/basic-auth-file.php'; },
          'error'    : function(){ alert('Bad Login Details');},
        }
      );

      return false;
    });
  });

这实现了我想要的目标,而且相对来说比较容易理解,但是我会恳求任何想要这样做的人,并且不知道基本的auth出去做研究!

答案 1 :(得分:8)

您可以将其替换为表单。 http://www.dur.ac.uk/vm.boatclub/password/index.php使用basic access authentication

基本访问认证

您可以做的是通过curl执行基本身份验证

<?php 
// HTTP authentication 
$url = "http://www.dur.ac.uk/vm.boatclub/password/index.php"; 
$ch = curl_init();     
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_URL, $url);  
curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");  
$result = curl_exec($ch);  
curl_close($ch);  
//echo $result; 
?> 

选项1

代理一切只是回应$result

选项2

来自$result

Read headers,如果状态代码!= 200,则输入了错误的登录信息。用户应该再次输入表格。如果输入了状态代码== 200的正确凭据,则应通过发送标头进行http基本身份验证。

header("Authorization: Basic " . base64_encode($username . ":" . $password);

在发送标头之前,您不应回显任何数据($ result),否则您将收到错误

一些快速链接: