[PHP] automatisch inloggen op WWW-authenticatie

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

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Beste progger.
Ik zit met een probleem dat mij bezig houd, en heb er nog steeds geen antwoord op gevonden. Een authenticatie login-systeem maken is een kippetje, en daar zit gelukkig het probleem niet.
Wat is dan wel het probleem? Je moet automatisch kunnen inloggen. Normaal kijg je dat popup venstertje dat door de browser wordt gemaakt, wat ik nu wil, is dat dit door bijv. een form of door PHP zelf gebeurt.
Is dit mogelijk? Kan je dus PHP bijv. de username en w8woord laten doorsturen, zodat er ingelogd wordt?

Waarom wil ik dit? En waarom gebruik ik geen sessie login systeem? Ik wil een directory beveiligen, zodat alleen user kunnen inloggen, want in die dir staan bijv. filmpjes (nee, geen warez) die niet zomaar iedereen mag downloaden (vanwege datatraffic). Nu wil ik alleen niet dat standaard popupje hebbben, want als ik het via PHP kan doen, hoef er niet eens een login formpje van te pas te komen. Zo zou je het bijv. kunnen maken, dat je naar mijn site gaat, PHP automatisch inlogt, en je dus alleen content kan bekijken of downloaden als je van mijn site af komt. Maar andere direct links naar de bestanden werken niet.

Nu de big question: is dit mogelijk? en hoe?

Btw: ik zoek niet naar een anti-leech oplossing, maar naar een anti-leech & membersysteem combo

[ Voor 4% gewijzigd door bgever op 11-03-2003 01:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan iemand doorsturen naar:

http://username:password@host.domeinnaam.nl

Maar in veel browsers wordt dan het wachtwoord getoond in de URL balk.

Het kan ook nog door een username en versleuteld wachtwoord mee te geven met $_GET ofzo, en als dat niet klopt een header("401 Authentication") ofzoiets te doen. Als dat wel klopt dan laat je de bezoeker gewoon door.

[ Voor 43% gewijzigd door Verwijderd op 11-03-2003 01:21 ]


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Verwijderd schreef op 11 March 2003 @ 01:16:
Maar in veel browsers wordt dan het wachtwoord getoond in de URL balk.
Als ik nu PHP via een header functie naar die url laat linken, en de nieuwe pagina die je dan krijgt (als je goed ingelogt bent) weer via een header functie laat doorlinken zou je als het goed is geen url moeten zien, omdat PHP nog geen output heeft vestuurd... of heb ik dat mis?

Acties:
  • 0 Henk 'm!

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Je ziet dan de URL inderdaad niet als je de ingelogde PHP een header laat versturen zonder het wachtwoord erin. Dit is dan eventueel nog wel terug te vinden in de history van de user.

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Spider.007 schreef op 11 March 2003 @ 01:32:Dit is dan eventueel nog wel terug te vinden in de history van de user.
[die-hard modus]Is dit ook nog te voorkomen door een JS clear_history functie ofzow?![/die-hard modus]
Ik denk dat ik niet te maken krijg met van die snuggere mensen die in de history gaan kijken ;) Maar toch zou ik er graag een opl voor hebben (of een andere manier om in te loggen zonder dat het in de history komt)
Kun je het w8woord en username dan niet posten met een form? Die variabelen kun je niet terug vinden...

Acties:
  • 0 Henk 'm!

  • sebas
  • Registratie: April 2000
  • Laatst online: 03-09 12:51
Wat ik zo 1-2-3 kan verzinnen is dat je een form maakt, POST request bij voorkeur en dat het target script gewoon doorstuurt naar http://user:password@host.tld bijvoorbeeld door middel van een location header. Hierdoor komt het niet in de history van de browser terecht.

Everyone complains of his memory, no one of his judgement.


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

Het lijkt mij het beste om geen .htpasswd te gebruiken, maar http authentication via PHP. Dan kun je als een gebruiker op een download-link klikt een record aanmaken in je database waar een 1x te gebruiken username en password instaat. Dan kun je die user rustig redirecten naar "user:pw@server.tld/bestand" aangezien die link toch geen tweede keer werkt. Als username en password gebruik je dan uniqueid() ofzo.

Als je het dan nog iets extra wil beveiligen zorg je ook dat je met die username/password combi alleen vanaf het IP van de "link-klikker" kan inloggen. Op die manier voorkom je ook dat een remote server "op je link klikt" en de gebruiker daarna doorstuurt naar die URL.

[ Voor 26% gewijzigd door Gerco op 11-03-2003 07:55 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Gerco schreef op 11 March 2003 @ 07:52:
Het lijkt mij het beste om geen .htpasswd te gebruiken, maar http authentication via PHP. Dan kun je als een gebruiker op een download-link klikt een record aanmaken in je database waar een 1x te gebruiken username en password instaat. Dan kun je die user rustig redirecten naar "user:pw@server.tld/bestand" aangezien die link toch geen tweede keer werkt. Als username en password gebruik je dan uniqueid() ofzo.
Het probleem is dan alleen, dat ik een membersysteem moet hebben, waar dus vaste users in staan. Ik zal dus wel een .htpasswd bestand aanmaken (dat doe ik trwns via PHP), waar dan de username en password in opgaslagen zijn. Als je inlogt, bewaart hij de login ook een een soort log db, zodat ik kan zien wie en via welk IP ingelogd is. Daarachter hang ik een scriptje dat kijkt of een user niet met teveel verschillende IP's inlogt om dus misbruik te voorkomen.

Maar de methode die jij beschijft had ik ook al bed8, en is een uitstekende manier om een anti-leech systeem te maken :) Je zou het zelfs zo kunnen aanpakken, dat als een user naar je site gaat, dat het IP als username wordt opgeslagen in .htpasswd, en dat je daarna dus inlogt via het IP. Dit loopt auto op de achtergrond, waardoor je het dus niet kan omzeilen, of je zou je IP moeten kunnen bewerken :). Het password kan dan eventueel ook nog gecodeerd kunnen worden, maar in princiepe zou een standaard of weer het IP ook volstaan.

Alleen ff een vraagje hiernaast: Als je eenmaal ingelogt bent, en je surft dan naar een andere pagina, probeert hij dan weer te opnieuw in te loggen met het (al ingevoerde) username en password, of maakt hij een sessie aan die een bepaalde lengte heeft. Als dat namelijk het geval is, lijkt het me niet zo slim om voor elke user opnieuw het IP op te slaan in een .htpasswd bestand, vooral niet als je zo'n 80.000 pageviews per dag hebt! :P Anders zou je nl na de login weer het IP uit het .htpasswd bestand kunnen verwijderen...
Ik meen ook iets gelezen te hebben dat je dus een lifetime of zoiets hebt voor www-authenticatie (ik neem dus aan dat er ergens de login gegevens bewaard worden), maar is die ook aan te passen?

[edit] Voordat ik het vergeet: @sebas: thnx voor die oplossing :) precies wat ik zocht. Een doorlink via PHP met de header functie slaat de browser dus niet op in de geschiedenis?

[ Voor 5% gewijzigd door bgever op 11-03-2003 10:36 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Ik denk dat je het jezelf nodeloos ingewikkeld maakt. Waarschijnlijk kun je veel beter een 'doorgeef scriptje' gebruiken waarin je eerst de credentials controleerd voordat je met fpassthru en de juiste headers het bestand opstuurt. Hierover is deze week nog een topic geweest.
[edit] Voordat ik het vergeet: @sebas: thnx voor die oplossing precies wat ik zocht. Een doorlink via PHP met de header functie slaat de browser dus niet op in de geschiedenis?
Het is altijd heel gevaarlijk om dit af te laten hangen van de client. Het staat misschien wel niet in de history, maar de username + pass combinatie is nog steeds erg makkelijk te achterhalen.


Hierzo -> [rml][ PHP] Files voor download aanbieden[/rml]

[ Voor 48% gewijzigd door Janoz op 11-03-2003 14:56 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Janoz schreef op 11 March 2003 @ 11:08:
Hierover is deze week nog een topic geweest.
Kun je ff het linkje posten, want ik heb het niet kunnen vinden...

Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
[rml][ PHP] Client Side Authentication[/rml]
Hier kan je vinden hoe je in PHP op '.htaccess beveiligde' sites kan 'inloggen'. Niks gebeurt client side hierbij dan. Nadeel is dat je dan alles weer via je PHP script moet afhandelen, de client krijg geen direct toegang tot die map via HTTP maar PHP wel. Andere manieren door de client een URL/POST REQUEST te geven met login gegevens lijkt mij IMHO geen verstandig iets.

Acties:
  • 0 Henk 'm!

Verwijderd

Glock schreef op 11 March 2003 @ 14:53:
Nadeel is dat je dan alles weer via je PHP script moet afhandelen, de client krijg geen direct toegang tot die map via HTTP maar PHP wel.
Maar wat vat je eigenlijk onder dat 'afhandelen', wat moet ik dus precies 'afhandelen'. Want ik wil dan deze manier gaan gebruiken, want dit is nl wat ik nodig heb. Het aangekoppelde membersysteem is geheel PHP, dus als ik weet wat je met afhandelen bedoelt, zou dat wel moeten lukken ;)
[edit]Whooops :) Oikoyama @ upselens place. Sorry :z

[ Voor 8% gewijzigd door Verwijderd op 11-03-2003 17:06 ]


Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
Verwijderd schreef op 11 March 2003 @ 17:05:
[...]
Maar wat vat je eigenlijk onder dat 'afhandelen', wat moet ik dus precies 'afhandelen'. Want ik wil dan deze manier gaan gebruiken, want dit is nl wat ik nodig heb. Het aangekoppelde membersysteem is geheel PHP, dus als ik weet wat je met afhandelen bedoelt, zou dat wel moeten lukken ;)
[edit]Whooops :) Oikoyama @ upselens place. Sorry :z
ik bedoel dus dat je geen directe link kan sturen naar die map als je met dit script inlogd ;) en als dat dus niet nodig is prima ;)

Acties:
  • 0 Henk 'm!

  • bgever
  • Registratie: April 2002
  • Laatst online: 28-05-2021
Glock schreef op 11 maart 2003 @ 17:17:
ik bedoel dus dat je geen directe link kan sturen naar die map als je met dit script inlogd ;) en als dat dus niet nodig is prima ;)
Het is juist de bedoeling dat je geen direct link kan maken, dus da's helemaal perfect :) Ik zal eens kijken of ik met jouw code (andere topic) een mooi scriptje kan maken ;)

Nu weet ik alleen nog niet hoe lang zo'n sessie geldig blijft, en hoe je (als dat nodig is) kunt uitloggen...

Acties:
  • 0 Henk 'm!

  • Glock
  • Registratie: November 2001
  • Niet online
Het uitloggen bij de WWW-Authenticate is niet nodig...
Bij elk request moet je nml de user en pass meesturen als ik het goed heb.
Het is juist de bedoeling dat je geen direct link kan maken, dus da's helemaal perfect :) Ik zal eens kijken of ik met jouw code (andere topic) een mooi scriptje kan maken ;)
Ohw, dan had ik je beginpost niet helemaal 100% begrepen :P
Pagina: 1