[PHP] omgevingsvariabele PHP_AUTH_USER

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Peopeo
  • Registratie: Juli 2001
  • Laatst online: 29-03-2022
Hoi,

Mijn vraag gaat over de volgende situatie:

Ik heb een php-bestandje geplaatst in een directory zonder .htaccess bestand. Vanuit deze webpage kan een login getriggerd worden door op een linkje te klikken; er wordt dan een image uit een andere directory met wèl een .htaccess bestand geladen, in een hidden div-je. Als het image in het hidden div-je succesvol laad dan wordt de de hele page vervolgens opnieuw geladen (met Onload). Dit werkt prima, en ik doe dat op deze wijze zodat een mislukte login geen (zichtbare) gevolgen heeft.

Het probleem is dat na een loging zoals die hierboven is toegelicht de user wel de benodigde rechten heeft, maar dat ik in het (opnieuw geladen) php-bestandje niet kan beschikken over de PHP_AUTH_USER variabele (de username waarmee is ingelogd). Ik vermoed omdat het php-bestandje zelf in een directory zonder .htaccess bestand staat.

Is er een manier om met bovenbeschreven constructie toch over de username te kunnen beschikken?

[ Voor 6% gewijzigd door Peopeo op 26-10-2009 12:01 ]

Philips MSX 2 | NMS 8250 | 2 disk drives | 2 cartridge sloten | 256 Kb RAM | toetsenbord | TV connection | 3,58 MHz | geen hard disk |


Acties:
  • 0 Henk 'm!

  • Kwastie
  • Registratie: April 2005
  • Laatst online: 17-09 13:58

Kwastie

Awesomeness

een session ?

When I get sad i stop being sad and be awesome instead


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Waarom laat je iemand niet inloggen in een formulier? Dan kun je zelf de nodige gegevens in een database opslaan bijv. en heb je geen probleem met rare constructies. Origineel vind ik t wel overigens :D

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 21:58

BHR

Wat je kan doen is niet direct het plaatje in de <img/> te plaatsen, maar te laten verwijzen naar een php script als login.php?image=login.gif. De authenticatie word nu nog steeds door apache afgehandeld, en als het goed is, heb je de beschikking over PHP_AUTH_USER binnen login.php. Gebruik dit moment om deze waarde in je $_SESSION te bewaren. Hierna heeft de volgende php pagina de mogelijkheid om deze username weer op te halen.

Als laatste actie binnen login.php doe je of
PHP:
1
<?php header('location: '. $_GET['image']); ?>
of
PHP:
1
<?php fpassthru(fopen($_GET['image'])); ?>
(Pseudocode; het mag duidelijk zijn dat je niet direct _GET gebruikt, maar eerst controle op de inkomende waarde toepast.)

PS. Uitloggen is met deze methode niet echt mogelijk.

edit: Ik heb dit ooit zelf eens toegepast, bij een project waarbij de .htpasswd beheerd werd door een ander product. Hierbij had ik een standaard login plaatje, en als je er opklikte, werd de src van dat plaatje aangepast naar het php script binnen de beveiligde map. Het andere plaatje was dan een "u bent ingelogd" plaatje.

[ Voor 17% gewijzigd door BHR op 26-10-2009 12:25 ]

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Waar hoort mijn topic?

PHP hoort bij de buren, dus een klein tikje naar /14 :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17-09 20:56
Welk probleem heeft je tot een constructie als deze gebracht? Ik kan me persoonlijk geen situatie voorstellen, waarbij dit de enige optie is. Het is geen direct antwoord op je vraag, maar ik zou nog eens kijken of je het hele probleem niet anders op kunt lossen. Kun je niet alles binnen het genoemde PHP-bestand afhandelen, zonder dat plaatje in die andere directory?

Ik vermoedt overigens dat de oplossing van BHR wel doet wat je zegt, behalve een mogelijk probleem met de header in de tweede optie.(zonder de redirect)

[ Voor 16% gewijzigd door doeternietoe op 27-10-2009 10:05 ]


Acties:
  • 0 Henk 'm!

  • Peopeo
  • Registratie: Juli 2001
  • Laatst online: 29-03-2022
@ Doeter: met de contructie die ik beschijf wil ik voorkomen dat na een mislukte login allerlei browser-standaard "Authorization Required" meldingen in beeld komen. M.a.w.: als inloggen op de betreffende page mislukt dan gebeurt er niks (lees: het plaatje in de hidden-div laad niet en toont een broken-link), en dat is wat ik wil.

@ BHR: interessante oplossing. Ik heb er echter voor gekozen om het op OS-niveau op te lossen (de gemakzuchtige manier zeg maar). Ter info hieronder wat ik gedaan heb:

De page laad na een klik op de inlog-knop nog steeds in een hidden div-je een image uit een directory met een .htaccess bestand, zodat de gebruiker gevraagd wordt om een wachtwoord. Ik heb echter, als oplossing, in dezelfde directory de het php-bestand van de page ge-hard-linked, en deze wordt in het geheel herladen (Onload op het image) na een succesvolle login op de originele page.

Bedankt voor het meedenken.

Philips MSX 2 | NMS 8250 | 2 disk drives | 2 cartridge sloten | 256 Kb RAM | toetsenbord | TV connection | 3,58 MHz | geen hard disk |


Acties:
  • 0 Henk 'm!

  • doeternietoe
  • Registratie: November 2004
  • Laatst online: 17-09 20:56
Peopeo schreef op woensdag 28 oktober 2009 @ 15:44:
@ Doeter: met de contructie die ik beschijf wil ik voorkomen dat na een mislukte login allerlei browser-standaard "Authorization Required" meldingen in beeld komen. M.a.w.: als inloggen op de betreffende page mislukt dan gebeurt er niks (lees: het plaatje in de hidden-div laad niet en toont een broken-link), en dat is wat ik wil.
No offence, en als het zo al werkt hoèf je het niet te veranderen, maar ik zou andere opties overwegen.

Allereerst kun je in je .htaccess ook die standaard "Authorization Required" pagina's wijzigen:
code:
1
ErrorDocument 401 errorPages/401.html


Een andere optie is alles volledig in PHP afhandelen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
$usr = 'Popeo';
$pwd = 'wachtwoord';
if( empty( $_SERVER[ 'PHP_AUTH_USER' ] ) || $_SERVER[ 'PHP_AUTH_USER' ] != $usr || $_SERVER[ 'PHP_AUTH_PW' ] != $pwd ){
    header( 'WWW-Authenticate: Basic realm="[vul hier je tekst in]"' );
    header( 'HTTP/1.0 401 Unauthorized' );
    require( './pagina_met_inhoud_voor_niet_ingelogde_gebruiker.html' );
}
else{
    require( './pagina_met_inhoud_voor_wel_ingelogde_gebruiker.html' );
}


Beide opties zijn niet getest, maar het gaat om het idee.

Ik heb aangenomen dat je met die "standaard browser meldingen" de Apache pagina bij een 401 status bedoelt.

Jouw optie werkt misschien wel, maar is imho extreem onoverzichtelijk. Niemand behalve jijzelf snapt op het eerste gezicht wat je in vredesnaam aan het doen bent.

Zie ook:
http://www.javascriptkit.com/howto/htaccess2.shtml
http://nl2.php.net/manual/en/features.http-auth.php

[ Voor 3% gewijzigd door doeternietoe op 28-10-2009 23:27 ]

Pagina: 1