[PHP] inloggen via link werkt niet in Hotmail *

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

Onderwerpen


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Ik heb een vrij eenvoudig authentificatie-systeem ontworpen waarbij de gebruiker een link krijgt gemaild met daarin in de URL de code om in te loggen. Dus ongeveer zo:
http://www...?user=bla&pass=blabla
Vervolgens controleert die pagina (dus waar ze dan op komen) of de opgeven username en password inderdaad zo in de tabel (MySQL) staan. Zo ja, dan wordt een sessie aangemaakt waarin ter controle een bepaalde variabele een waarde krijgt. Deze sessie is voor een bepaalde lengte geldig en wordt na het afronden van de bewerkingen online weer beeindigd.

Dat werkt prima bij het gros van de gebruikers. Mensen die de mail in Hotmail lezen klagen echter veelvuldig over het niet krijgen van toegang. Dit lijkt op een probleem te wijzen met de sessie.

Weet iemand waarom het aanmaken van een sessie met PHP klaarblijkelijk problematisch is, wanneer de URL wordt opgeroepen binnen Hotmail.

Ik gebruik die dienst niet, maar heb wel eens gezien dat Hotmail alle URLs heel sneaky bewerkt zodat ze in een frame geladen worden. Dat mag echter op de sessies toch geen invloed hebben?

Alvast bedankt.

  • not-known
  • Registratie: Februari 2002
  • Laatst online: 20-07 00:04

not-known

[BI] Crewmember

Een link in hotmail wordt aageroepen vanuit een frame, terwijl de browser uit veiligheidsoverwegingen geen cookies toelaat uit andere sites, dan de site waaruit de link wordt geopend. Dus een session/cookie vanaf een andere site (geopend binnen dit frame) gaat niet werken.

[ Voor 11% gewijzigd door not-known op 18-11-2004 16:28 ]

Officiëel bikkel'n in #bikkels
Campzone Veld C FieldAdmin
De Veld C site!


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
not-known schreef op donderdag 18 november 2004 @ 16:26:
Een link in hotmail wordt aageroepen vanuit een frame, terwijl de browser uit veiligheidsoverwegingen geen cookies toelaat uit andere sites, dan de site waaruit de link wordt geopend. Dus een session/cookie vanaf een andere site (geopend binnen dit frame) gaat niet werken.
Met andere woorden: een simpel stukje code in JavaScript die de pagina gewoon laadt buiten de frames om is al voldoende?

Aangezien de kracht van dit forum schuilt in het linken plaats ik alvast het resultaat van een kleine zoektocht naar de Javascript-code: if(self != top) >> reload

Niet echt PHP gerelateerd: heeft Hotmail voor zoiets geen counter-code? Dus een unload event van de framepagina?

[ Voor 18% gewijzigd door TromboneFreakus op 18-11-2004 16:44 ]


  • not-known
  • Registratie: Februari 2002
  • Laatst online: 20-07 00:04

not-known

[BI] Crewmember

Als het goed is moet een scriptje wel werken, zolang je maar buiten hotmail bivakkeert.

Officiëel bikkel'n in #bikkels
Campzone Veld C FieldAdmin
De Veld C site!


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
__

[ Voor 101% gewijzigd door TromboneFreakus op 18-11-2004 16:43 . Reden: net was de edit knop weg:( ]


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
Oh ja, om anderen te helpen die ook tegen dit probleem aanlopen het volgende. Dit eenvoudige scriptje werkt:

bestand:framecheck.php
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if (isset($frames)) {

header("location: http://***********/toegang.php?user=$user&password=$password");
}

?>

<html>
<body onload="if (top!=self) top.location=self.location+'&frames=no';">
<?php

echo "<h2>De pagina wordt nu geladen....</h2><hr>";
echo "<P>Gebeurt er niets, klik dan 
<a target='_blank' href='http://******/toegang.php
?user=$user&password=$password'>hier</a>";
?>


</body>
</html>


In het bestand toegang.php wordt dan vervolgens pas de sessie aangemaakt. Op deze eenvoudige wijze zijn de frames altijd verwijderd.

[ Voor 15% gewijzigd door TromboneFreakus op 21-11-2004 20:11 ]


Acties:
  • 0 Henk 'm!

  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
En voor de precieze programmeur: eigenlijk moet hier nog een check op het bestaan van de variabelen bij:

code:
1
2
3
<?php
if (!isset($user)) and (!isset($password) {
}

  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 19-09 21:49

BierPul

2 koffie graag

TromboneFreakus schreef op woensdag 24 november 2004 @ 15:27:
En voor de precieze programmeur: eigenlijk moet hier nog een check op het bestaan van de variabelen bij:

code:
1
2
3
<?php
if (!isset($user)) and (!isset($password) {
}
Ik denk dat de precieze programmeur het toch iets anders zou doen ;)

1. Als je gaat veranderen van server waar de register_globals instelling anders is
ben je 'ineens' de waarden kwijt ;)

Kijk eens op deze link http://nl.php.net/register_globals

2. Lijkt het me niet slim om in te loggen via een URL het kan namelijk gebeuren dat er 'links en rechts' gespiderde of gecachede URL's naar boven komen :X

Het enige wat je dan nog hoeft te doen is de link te volgen en je bent binnen ;)

Een username 'prefillen' tot daar aan toe maar laat het wachtwoord alsjeblieft over aan de gebruiker zelf ;)

Ja man


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 07-11-2023

kvdveer

Z.O.Z.

Nog een alternatief:
Je zou je loginformuliertje kunnen submitten met je php-sessie-id...
Je krijgt dan zoiets als:
PHP:
1
2
echo "<form method=post action=\"login.php?dinges=konijn&SES=".session_id()."\">";
// en dan de rest van je formulier.


Bovenaan login.php (of hoe je het ook noemt) zet je dan (voor session_start() ):
PHP:
1
2
if( array_key_exists( 'SES', $_POST ) ) session_id( $_POST['SES'] );
session_start();


Uiteraard kun je dan niet meer via de URL inloggen, maar als je dat wilt kun je net zo goed geen loginsysteempje maken.

[ Voor 20% gewijzigd door kvdveer op 25-11-2004 11:25 ]

Localhost, sweet localhost


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
BierPul schreef op donderdag 25 november 2004 @ 09:16:
[...]

2. Lijkt het me niet slim om in te loggen via een URL het kan namelijk gebeuren dat er 'links en rechts' gespiderde of gecachede URL's naar boven komen :X

Het enige wat je dan nog hoeft te doen is de link te volgen en je bent binnen ;)
Nou ja.. het idee in dit geval is dat de code slechts eenmalig geldig is en verwijderd wordt zodra men is ingelogd. Wordt vervolgens met een niet-bestaande code (dus zo'n oude URL) ingelogd, dan wordt de bezoeker direct verwezen (via header constructie) naar de startpagina.

Dus de link is slechts eenmalig geldig, dat lijkt me niet onveilig. Of mis ik nu iets?

Bovendien betreft het een online enquete, waarbij iedereen mee mag doen. Dus juist zo'n oude URL kan wellicht nog deelname uitlokken.

  • --MeAngry--
  • Registratie: September 2002
  • Laatst online: 19-09 16:35

--MeAngry--

aka Qonstrukt

Wat je het beste kunt doen is als de gebruiker zichzelf aanmeldt een unieke key genereren (MD5-hash ofzo) en die in de URL in het mailtje zetten tesamen met het userid van de aan te melden user.
Die userid en key combinaties sla je op in de database, tot op het moment dat de user op de link heeft geklikt, en daarna verwijder je die combinatie weer uit de database en zorg je dat de user geactiveerd wordt. :)

Tesla Model Y RWD (2024)


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 19-09 21:49

BierPul

2 koffie graag

TromboneFreakus schreef op donderdag 25 november 2004 @ 11:27:
[...]
Bovendien betreft het een online enquete, waarbij iedereen mee mag doen. Dus juist zo'n oude URL kan wellicht nog deelname uitlokken.
hehe met zo'n redenatie kan je hem zowiezo beter inlog vrij houden :P , dan doe je toch puur een gebruiker id als referentie dat diegene uit zn mail heeft geklikt.

Dus alleen voor stats en niet voor veiligheid :)

Ja man


  • TromboneFreakus
  • Registratie: Juli 2001
  • Laatst online: 01-08-2023
--MeAngry-- schreef op donderdag 25 november 2004 @ 11:27:
Wat je het beste kunt doen is als de gebruiker zichzelf aanmeldt een unieke key genereren (MD5-hash ofzo) en die in de URL in het mailtje zetten tesamen met het userid van de aan te melden user.
Die userid en key combinaties sla je op in de database, tot op het moment dat de user op de link heeft geklikt, en daarna verwijder je die combinatie weer uit de database en zorg je dat de user geactiveerd wordt. :)
Dat is precies wat er gebeurt. :)

De case is als volgt. Er loopt een enquete over Blackboard op www.bbenquete.cjb.net. De deelnemende student vult zijn studentnummer in en krijgt op basis daarvan een mailtje met in de URL zijn studentnummer en een gegenereerd wachtwoord. Studentnummer en wachtwoord gaan ook in een tabel.

Zodra de student op het mailtje klikt wordt in de database vergeleken of het wachtwoord klopt. Zo ja, dan wordt een sessie gestarten wordt de student verwezen naar de enquete (via header-constructie). Zo nee, dan wordt de student weer teruggestuurd naar het startscherm (dat ging dus eerst mis met Hotmail, iedere Hotmail gebruiker werd hier teruggestuurd... :().

Aan het einde van de enquete wordt de sessie beeindigd en wordt in de tabel opgeslagen dat onder dit studentnummer is deelgenomen.
Pagina: 1