我正在使用当前使用基本身份验证对话框登录系统的网站,这是您进入此处时获得的对话类型: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来让浏览器以这种方式访问该网站?或者我只需要更改我的用户界面吗?
答案 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;
?>
代理一切只是回应$result
$result
的Read headers,如果状态代码!= 200,则输入了错误的登录信息。用户应该再次输入表格。如果输入了状态代码== 200的正确凭据,则应通过发送标头进行http基本身份验证。
header("Authorization: Basic " . base64_encode($username . ":" . $password);
在发送标头之前,您不应回显任何数据($ result),否则您将收到错误