[PHP/Apache] Auto login op een met .htaccess beveiligde dir

Pagina: 1
Acties:
  • 127 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
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:

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>
...

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Heb je Google al bezocht?

[ Voor 76% gewijzigd door Sendy op 22-08-2004 17:59 ]


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
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.
Nog veel erger: een up2date versie van IE accepteert de syntax niet.

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Die pagina in een frame zetten maakt get weinig veiliger, dan nog kan je gewoon die user/pass opvragen hoor.

Acties:
  • 0 Henk 'm!

  • dawuss
  • Registratie: Maart 2001
  • Laatst online: 10-07 16:50

dawuss

gadgeteer

GlowMouse schreef op 22 augustus 2004 @ 18:01:
[...]

Nog veel erger: een up2date versie van IE accepteert de syntax niet.
Is er uberhaupt een manier om usernames en passwords door te geven voor HTTP AUTH in IE? Of proberen ze daadwerkelijk het internet om zeep te helpen daar?

micheljansen.org
Fulltime Verslaafde Commandline Fetisjist ©


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

dawuss schreef op 22 augustus 2004 @ 18:03:
[...]

Is er uberhaupt een manier om usernames en passwords door te geven voor HTTP AUTH in IE? Of proberen ze daadwerkelijk het internet om zeep te helpen daar?
ja, gewoon dat login windowtje, iets anders niet meer. Lang leve IE :P

Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
Die pagina in een frame zetten maakt get weinig veiliger, dan nog kan je gewoon die user/pass opvragen hoor.
Ja, idd maar dan moet je er al moeite voor doen. Het is idd niet net en helemaal niet veilig dus zoek ik een betere oplossing.

[edit]

Ok, bedank! nu heb ik dit:

PHP:
1
2
Header('Authorization:  user  '.ucfirst(strtolower($_POST['user'])).':'.$_POST['user']);
        Header('Location: http://'.$_SERVER["HTTP_HOST"].'/project/');


Als ik dit vervolgens met SSl doe moet het wel waterdicht zijn.
In mozilla werkt het soepeltjes, maar IE doet weer moeilijk.
Daar krijg ik namelijk na het inloggen weer het gewone login popup-scherm.

@Erkens:
Ja, waterdicht is een beetje een te groot woord, klopt.
Echter, het verkeer tussen A en B is het enige waar ik me druk over maak.
A moet zelf maar zijn pass geheim zien te houden, dat is niet aan mij. En B is een server op een veilige locatie. Het 'onveilige' zit hem anders dus in het feit dat men hun passwords plain text over de lijn verzenden. Met SSL is dat RSA encrypted dus vind ik dat ik er vanuit mag gaan dat dat veilig is. (al valt dat ook nog makkelijk te sniffen) Ik kan in ieder geval zeggen dat ik m'n best heb gedaan, dus veilig zat. :)

[ Voor 35% gewijzigd door Maxonic op 22-08-2004 18:29 ]


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Maxonic schreef op 22 augustus 2004 @ 18:09:
Als ik dit vervolgens met SSl doe moet het wel waterdicht zijn.
offtopic:
waarom denkt iedereen dat als er SSL gebruikt wordt dat dat dan direct veilig is? Dat is het niet! Alleen het transport tussen A en B is encrypted, meer niet.
Pagina: 1