Ik heb een directory op mijn server genaamd 'project' met een htaccess bestand beveiligd. Nu wil ik echter op die directory in kunnen loggen met een webform.
Ik laad nu het .htpasswd bestand in een array en vergelijk de usernames en wachtwoorden. Als het klopt stuur ik de user door naar http://user:pass@host:port/project.
Echter, IE wil hier met sommige versies moeilijk over doen en als je de pagina niet in een frame opent dan zie je altijd je user + pass in de adresbalk staan. Niet echt een ideale oplossing dus.
Nu vroeg ik me af of ik dit inloggen niet kan doen door een speciale Header te versturen?
Ik heb gezocht maar niet veel bruikzaams gevonden. Dit is wat ik nu heb:
Ik laad nu het .htpasswd bestand in een array en vergelijk de usernames en wachtwoorden. Als het klopt stuur ik de user door naar http://user:pass@host:port/project.
Echter, IE wil hier met sommige versies moeilijk over doen en als je de pagina niet in een frame opent dan zie je altijd je user + pass in de adresbalk staan. Niet echt een ideale oplossing dus.
Nu vroeg ik me af of ik dit inloggen niet kan doen door een speciale Header te versturen?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
| <? // Laad het .htpasswd bestand in een user-array en een password-array. $users = array(); $passes = array(); $lines = file('closed/.htpasswd'); foreach ($lines as $line_num => $line) { unset($temp); $temp = explode(':',$line); $users[$line_num] = $temp[0]; $passes[$line_num] = $temp[1]; } // Als er gepost is met het inlogform... if(isSet($_POST['user']) || isSet($_POST['pass'])){ // Usernames in kleine letters beginnend met een hoofdletter if (!in_array(ucfirst(strtolower($_POST['user'])), $users) || crypt($_POST['pass'],CRYPT_STD_DES) != trim($passes[array_search(ucfirst(strtolower($_POST['user'])), $users)])) { // Inloggen mislukt $image = 'closed/i-wont-pas-front.jpg'; } else { // Dit werkt niet in IE en is smerig. Header('Location: http://'.ucfirst(strtolower($_POST['user'])).':'. $_POST['pass'].'@'.$_SERVER["HTTP_HOST"].'/project/'); // Zo krijg je nog een keer het scherm, nutteloos dus #Header('Location: http://'.$_SERVER["HTTP_HOST"].'/project/'); // Eigenlijk zo zoiets ideaal zijn # Header('WWW-Authenticate: Negotiate'); # Header('User: '.ucfirst(strtolower($_POST['user']))); # Header('Pass: '.$_POST['pass']); # Header('Location: http://'.$_SERVER["HTTP_HOST"].'/project/'); } } else { // Nog niet ingelogd $image = 'closed/i-pas-front.jpg'; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> ... |