Hei!
Olen tekemässä web-sivua, joka vaatii autentikointia. Minulla on postgresql -tietokanta, jossa käyttäjien tiedot, salasanat ja käyttäjätunnukset sijaitsevat.
PHP-skripti toimii muuten ok, mutta autentikointi ei toimi. Saan siis salasanat ja käyttäjätunnukset esille tietokannasta, mutta http basic autentikointi ei toimi.
Tämä osa on minusta ongelmallinen:
if (isset( $PHP_AUTH_USER ) AND isset($PHP_AUTH_PW)) {
..Tarkasta tietokannasta, löytyykö käyttäjätunnusta & salasanaa... Tämä toimii siis OK!
}
Ikäänkuin pop-up -ikkuna, jossa kysytään salasanoja ei palauttaisi mitään skriptille??? Eli tuo isset-kysely ei toimisi?
Tässä luodaan pop-up -ikkuna:
if (!$auth) {
header( 'WWW-Authenticate: Basic realm="Private"' );
header( 'HTTP/1.0 401 Unauthorized' );
print 'Authorization Required.';
exit;
} if($auth) {
print 'You are authorized!';
}
Mikähän mättää? Joku asetus tai vastaava?
Olen tekemässä web-sivua, joka vaatii autentikointia. Minulla on postgresql -tietokanta, jossa käyttäjien tiedot, salasanat ja käyttäjätunnukset sijaitsevat.
PHP-skripti toimii muuten ok, mutta autentikointi ei toimi. Saan siis salasanat ja käyttäjätunnukset esille tietokannasta, mutta http basic autentikointi ei toimi.
Tämä osa on minusta ongelmallinen:
if (isset( $PHP_AUTH_USER ) AND isset($PHP_AUTH_PW)) {
..Tarkasta tietokannasta, löytyykö käyttäjätunnusta & salasanaa... Tämä toimii siis OK!
}
Ikäänkuin pop-up -ikkuna, jossa kysytään salasanoja ei palauttaisi mitään skriptille??? Eli tuo isset-kysely ei toimisi?
Tässä luodaan pop-up -ikkuna:
if (!$auth) {
header( 'WWW-Authenticate: Basic realm="Private"' );
header( 'HTTP/1.0 401 Unauthorized' );
print 'Authorization Required.';
exit;
} if($auth) {
print 'You are authorized!';
}
Mikähän mättää? Joku asetus tai vastaava?
Vastaukset 4
Vanhimmat
*if (isset( $PHP_AUTH_USER ) AND isset($PHP_AUTH_PW))*
Ei noin, nykyään super globaaleja pitää käyttää. http://fi.php.net/variables.predefined
Nuo löytyvät $_SERVER alta joten $_SERVER['PHP_AUTH_USER'] jne....
Ja jos php.inissä on globall = off niin $PHP_AUTH_USER ja $PHP_AUTH_PW eivät saa koskaan tietoja, joten kirjaantuminen ei voi toimia.
Basic Auth on aika karsee vaihtoehto, koska kirjautumisen jälkeen menee tunnus ja salasana jokaisessa pyynnössä mukana. Muistaakseni ainoastaan bas64 koodattuna. Lähiverkon kaikki koneet siis näkee salasanat ja proxyn ylläpitäjät jne jne.
Mieluummin oma lomake ja sekin https-sivulle.
Lomakkeen vastauksesta tarkistat tunnuksen ja salasanan kantaa vasten. Jos ne täsmää, niin perustat session.
Jos käyttäjä tulee sivulle ja ei ole sessiota, niin tiedät että pitää näyttää kirjautuminen.
Toinen vaihtoehto on htaccess
Tuo global -asetuksen muuttaminen ON-asentoon auttoi. Pitää tosin miettiä paremmaksi tuo kirjautuminen.
Ensimmäinen PHP -projekti, jota teen aivan itselleni, pelkän harjoituksen ja tekemisen ilon takia ;). Tulee samalla perehdyttyä tietokantoihin paremmin.
* Lähiverkon kaikki koneet siis näkee salasanat ja proxyn ylläpitäjät jne jne.*
Lähiverkon koneet eivät nää liikennettä, ellei lähiverkkoa ole toteutettu hubeilla, ja hubeja ei enään pahemmin käytetä, ehkä joissain kotiverkoissa ja niissä ei pahemmin tuo ongelma haittane.
Hubi kaijuttaa kaiken liikenteen kaikkiin siinä oleviin portteihin jolloin sen seuranta on helppoa.
*Toinen vaihtoehto on htaccess*
Eikös tuossakin jokaisessa pyynnössä mene salasana ja tunnus?
Joten ei tuokaan kovin turvallinen ole. Eikös tuo ole periaatteessa ihan sama kuin tässä toteutettu juttu?
*Tuo global -asetuksen muuttaminen ON-asentoon auttoi.*
Tuo ei ole ratkaisu. Olet saman ongelman edessa kun siirrät tuon jollekkin palvelimelle. Tietoturvaakin tuo huonontaa.
Korjaa ennemmin if (isset( $PHP_AUTH_USER ) AND isset($PHP_AUTH_PW))
Seuraavaksi
*if (isset($_SERVER['PHP_AUTH_USER']) AND isset($_SERVER['PHP_AUTH_PW']))*
*Ensimmäinen PHP -projekti*
Ensinmäisestä alkaen kaikki kannattaa opetella tekemään oikein, väärän tavan kun oppii niin sitä tulee sitten käytettyä.
Ja jos kyse on jostain valokuvat salasana suojattuina niin silloin riittää ihan yksinkertainenkin suojaus vaikka se olisi mahollista murtaa liikennettä kuuntelemalla.