|
|||||||
|
|
Luku 17. PHP ja HTTP-autentikaatioPHP:n HTTP-autentikaatiotuki on käytettävissä ainoastaan mikäli PHP on asennettu Apachen moduuliksi, eikä siten ole saatavilla CGI-moduulissa. Apachen moduulina ajettavassa PHP-skriptissä voidaan header() -funktiolla lähettää Web-selaimelle autentikaatiopyyntö, jolloin toteutustavasta riippuen selain kysyy käyttäjältä käyttäjätunnusta ja salasanaa. Kun käyttäjä on saanut syötettyä nämä tiedot, URL:ia, jossa tämä skripti sijaitsee, kutsutaan uudelleen. Tällä kertaa ennalta määriteltyjen muuttujien PHP_AUTH_USER, PHP_AUTH_PW ja AUTH_TYPE arvoina on käyttäjän syöttämät tiedot sekä autentikaatiotyyppi. Nämä muuttujat löytyvät $_SERVER ja $HTTP_SERVER_VARS -listoista. Vain yksinkertainen (Basic) autentikaatio on tuettu. Lisätietoja asiasta löytyy funktiosta header().
Seuraavanlaisella skriptinpätkällä voidaan pakottaa asiakas tunnistautumaan sivulle.
Pelkän syötettyjen arvojen tulostamisen sijaan voit mahdollisesti haluta tarkistaa muuttujien PHP_AUTH_USER ja PHP_AUTH_PW sisällön oikeellisuuden, ehkäpä tekemällä kyselyn tietokantaan tai etsimällä käyttäjää dbm-tiedostosta. Varo virheellisesti toimivia Internet Explorerin versioita. Ne saattavat olla erittäin tarkkoja siitä missä järjestyksessä HTTP-otsikkotiedot syötetään. WWW-Authenticate -otsikon lähettäminen ennen HTTP/1.0 401 -otsikkoa näyttäisi kuitenkin toimivan tällä hetkellä. PHP 4.3.0 ja uudemmat versiot eivät aseta PHP_AUTH-muuttujia, mikäli ulkoinen autentikaatio on otettu käyttöön määritetyllä sivulla ja mikäli safe mode on käytössä. Tämä estää sellaisten skriptien teon, joilla voitaisiin paljastaa perinteisin metodein autentikoidun käyttäjän tunnukset. Siitä huolimatta, REMOTE_USER -muuttujaa (eli $_SERVER['REMOTE_USER']) voidaan käyttää ulkoisesti autentikoidun käyttäjän tunnistamiseen.
Huomaa kuitenkin, että edellämainittu tapa ei estä samalla palvelimella sijaitsevia ei-autentikoituja URLeja varastamasta autentikoidun URLin salasanoja. Sekä Netscape Navigator että Internet Explorer tyhjentävät HTTP-autentikaatiotiedot välimuististaan saadessaan HTTP-vastauksen 401. Tällä keinolla voidaan "kirjata ulos" käyttäjä, pakottaen heidät syöttämään käyttäjätunnuksensa uudelleen. Jotkut käyttävät tätä keinoa istuntojen aikakatkaisuun tai "kirjaudu ulos" -painikkeen toteuttamiseen.
Tämänkaltaista toiminnallisuutta ei kuitenkaan vaadita HTTP Basic authentication -standardissa, joten siihen ei tulisi koskaan luottaa. Testaaminen Lynx-selaimella osoittaa, että Lynx ei tyhjennä autentikaatiotietojaan saadessaan palvelimelta vastauksen 401, joten palaaminen edelliselle sivulle ja samantien takaisin avaa uudelleen saman resurssin -- niin kauan kuin käyttöoikeusvaatimukset eivät ole muuttuneet. Käyttäjä voi kuitenkin painaa Lynxissä '_' -näppäintä tyhjentääkseen autentikaatiotiedot. Huomaa myös, että HTTP-autentikaatio ei ole toiminut ennen PHP:n versiota 4.3.3 CGI-moduulina Microsoftin IIS-palvelimessa sen rajoittuneisuuden takia. Sen käyttöönotto PHP 4.3.3:ssa tai uudemmissa versioissa vaatii asetuksen "Directory Security" muokkausta. Klikkaa kohtaa "Edit" ja valitse ainoastaan "Anonymous Access", kaikki muut kentät tulee jättää tyhjäksi. PHP:n IIS-moduulissa (ISAPI) on puolestaan sellainen puute, että PHP_AUTH_* muuttujia ei voida käyttää, vaan niiden sijaan on käytettävä muuttujaa HTTP_AUTHORIZATION. Kokeile esimerkiksi seuraavaa koodia: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));.
| ||||||
|
|
|
Home :: Copyright :: Privacy :: Credits :: Get a free Linuxinfor Email Account Document on this page is part of "PHP Käsikirja". See Index Page for more info about Authorship and Copyright. 1999-2008 Linuxinfor.com. No rights reserved. |