我正在尝试使用AJAX+PHP+.htaccess.保护带有密码的上传脚本
我的测试网站位于http://scrabble.stats.org.pl/test/gcg/.如果从下拉列表中选择一个选项,则会出现一个表格。然后,在最右边的列中,您将看到"Dodaj"("添加")按钮。他们的"更改"事件在第25行用AJAX处理(下面是最低版本):
xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
$('.upload').on('change', function(event) {
var file_data = $(event.target).prop('files')[0];
//console.log(file_data);
var form_data = new FormData();
form_data.append('file', file_data);
$.ajax({
url: 'upload.php', // point to server-side PHP script
dataType: 'text', // what to expect back from the PHP script, if anything
cache: false,
contentType: false,
processData: false,
data: form_data,
type: 'post',
success: function(php_script_response){
var response = $.parseJSON(php_script_response);
if ( response.status == 'error') {
alert( response.errormsg );
}
else {
$(event.target).closest('.fileUpload').hide();
}
}
});
});
}
};
upload.php
可以在这里找到。它只是将上传文件的内容保存到数据库中。它返回一个具有success
或error
状态的$response_array
。
现在,我知道了如何用.htaccess文件保护服务器上的文件夹,它运行良好(请查看http://scrabble.stats.org.pl/test/gcg/upl):
AuthType Basic
AuthUserFile "/usr/auth.passwd"
require valid-user
AuthName "Protected site"
是否可以仅保护upload.php
,以便在用户单击"添加"按钮时网站提示输入密码
我发现了这个,这个和这个,并尝试了这些解决方案,但它们似乎不起作用。通常我会在Chrome控制台中得到这个错误:
http://scrabble.stats.org.pl/test/gcg/upload/upload.php
Failed to load resource: the server responded with a status of 405 (Not
Allowed)
恐怕我可能不理解上述解决方案。首先,我不确定btoa(username + ":" + password)
部分。这些是特殊的关键词,还是我应该公开user:pass这些方法?
您的第一个链接似乎做了正确的事情。
单击"添加"按钮时,您需要自己显示一个弹出窗口或表格,请求上传的用户名和密码。php
然后,您可以将这些数据提交到服务器,如本文所示。
btoa方法将数据编码为base64。
基本上,您只需发送一个基本身份验证的标头("Authorization",…),并作为数据提供用户名和密码。
恐怕我可能不理解上述解决方案。首先,我不确定btoa(用户名+":"+密码)部分。这些是特殊的关键词,还是我应该公开user:pass这些方法?
当您登录到服务器时,您必须始终发送用户名和密码。在btoa(username + ":" + password)
中,username
和password
是您必须设置的变量(通过从上述登录表单中读取数据)。