Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[php] beveiliging met windows login

Pagina: 1
Acties:
  • 524 views sinds 30-01-2008

Verwijderd

Topicstarter
Uit opdracht van mijn school ben ik een mentorschaps enquete website aan het programmeren (om mening te geven over de taken die de mentor uitvoert).
Deze enquete moet beveiligd worden zodat het onmogelijk is dat een leerling de enquete voor 100 andere leerlingen gaat invullen om zo de mentor af te zeiken.
Systeembeheer wil niet nog een database met allemaal wachtwoorden voor alleen een enquete (begrijpelijk). Ik zelf wil geen database hebben met de leerlingnummers en bijbehorende windows inlog wachtwoorden. Dit zou alleen een beveiligingslek veroorzaken. Er hoeft maar 1 iemand een lek in mijn database te vinden en hij heeft toegang tot alle leerlingnummers+wachtwoorden. Nu heb ik de volgende oplossing bedacht (geen idee of hij technisch uitvoerbaar is).

1. Een leerling is op dit moment verplicht in te loggen op een schoolcomputer met zijn eigen leerlingnummer+wachtwoord.
2. Een leerling moet zijn leerlingnummer invoeren in de mentorschapsenquete.
3. Hier komt het: Het leerlingnummer dat ingevoerd wordt bij de mentorschaps enquete, moet vergeleken worden met de windows login naam. Als deze 2 overeenkomen heb ik indirect toch een wachtwoordcontrole. Een leerling kan dus alleen de mentorschapsenquete invullen als zijn leerlingnummer overeenkomt met de inloggegevens van windows. Op school gebruiken wij zowel windows 98 als XP. Weet iemand of dit technisch uitvoerbaar is? Zoja, hoe?

  • Kickasz
  • Registratie: April 2003
  • Niet online
Als jij alle leerling nummers in een database zet, vervolgens elke leerling laat registreren. Doordat je een controle uitvoert dat een leerling nummer maar 1x geregistreerd mag worden, heb je ook een aardige controle. Daarnaast kan je een leerling nummer ook nog combineren met een klas en/of mentor, waardoor je de controle uit meerdere variabelen maakt. Hierdoor wordt het lastiger om te registreren voor mensen die je enquete om zeep willen helpen.

Dat lijkt mij een makkelijkere manier, ik zelf weet niet hoe je in php een gebruikersnaam uit leest. Weet alleen dat Windows de gebruikersnaam uit leest met %username% (Win 2000 / XP), maar dat werkt alleen in windows.

Even zoeken...

  • Flard
  • Registratie: Februari 2001
  • Laatst online: 21:41
Ik weet dat je in ASP de ingelogde user kunt opvragen met
Request.ServerVariables("REMOTE_USER")

Wellicht kun je hiermee het php-alternatief vinden?

(In ASP is het dus mogelijk, dus ik kan me niet voorstellen dat het in PHP niet mogelijk is ;) )

  • simon
  • Registratie: Maart 2002
  • Laatst online: 23-11 13:08
Flard schreef op zondag 06 februari 2005 @ 13:08:
Ik weet dat je in ASP de ingelogde user kunt opvragen met
Request.ServerVariables("REMOTE_USER")

Wellicht kun je hiermee het php-alternatief vinden?

(In ASP is het dus mogelijk, dus ik kan me niet voorstellen dat het in PHP niet mogelijk is ;) )
Dat lijkt me een server variabele, het lijkt me moeilijk om te weten welke user je pagina connect als je browser dat niet meegeeft. Misschien kun je dat met een JS eruit halen, maar dat lijkt me niet echt 'the way to go'

|>


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Het makkelijkste lijkt me dat je ze hun username/password combinatie laat invoeren - jij authenticeert vervolgens via LDAP aan hun active directory en als je correct kan binden (zie even naar http://www.php.net/ldap_bind) met de gegeven username/password is het juist.

Vervolgens hoef je de username en password niet op te slaan - en creeer je geen security lek :)

Een andere 'oplossing' zou je kunnen bewerkstelligen door met VBScript op de clientside de NetworkUsername (oid) uit te lezen en dit mee te laten posten, maar dat is relatief gemakkelijk te faken lijkt me ;)

[ Voor 23% gewijzigd door elevator op 06-02-2005 13:12 ]


  • Kickasz
  • Registratie: April 2003
  • Niet online
Gevonden: :9

Hier wordt uitgelegd hoe je LDAP moet koppelen aan PHP _/-\o_

http://asia.cnet.com/buil...,39009336,39105862,00.htm

Succes er mee!

Verwijderd

Verwijderd schreef op zondag 06 februari 2005 @ 12:55:
Uit opdracht van mijn school ben ik een mentorschaps enquete website aan het programmeren (om mening te geven over de taken die de mentor uitvoert).
Deze enquete moet beveiligd worden zodat het onmogelijk is dat een leerling de enquete voor 100 andere leerlingen gaat invullen om zo de mentor af te zeiken.
Systeembeheer wil niet nog een database met allemaal wachtwoorden voor alleen een enquete (begrijpelijk). Ik zelf wil geen database hebben met de leerlingnummers en bijbehorende windows inlog wachtwoorden. Dit zou alleen een beveiligingslek veroorzaken. Er hoeft maar 1 iemand een lek in mijn database te vinden en hij heeft toegang tot alle leerlingnummers+wachtwoorden. Nu heb ik de volgende oplossing bedacht (geen idee of hij technisch uitvoerbaar is).

1. Een leerling is op dit moment verplicht in te loggen op een schoolcomputer met zijn eigen leerlingnummer+wachtwoord.
2. Een leerling moet zijn leerlingnummer invoeren in de mentorschapsenquete.
3. Hier komt het: Het leerlingnummer dat ingevoerd wordt bij de mentorschaps enquete, moet vergeleken worden met de windows login naam. Als deze 2 overeenkomen heb ik indirect toch een wachtwoordcontrole. Een leerling kan dus alleen de mentorschapsenquete invullen als zijn leerlingnummer overeenkomt met de inloggegevens van windows. Op school gebruiken wij zowel windows 98 als XP. Weet iemand of dit technisch uitvoerbaar is? Zoja, hoe?
Het *kan* maar ik vind het een erg rommelige oplossing. Het is veel beter om PHP te laten authenticeren met het windows domein. (je wilt gebruikers i.d.d. liever niet nog eens een usernaam en wachtwoord geven). Ik heb een dergelijk systeem opgezet (draait onder Linux) dat gebruikt maakt van authenticatie op een Windows domein. Op de windows server draait daartoe een radius server (Ldap ligt daarvoor tegenwoordig meer voor de hand) waartegen geauthenticeerd wordt.

Om single signon over meerdere webservers mogelijk te maken gebruik ik daartussen nog een zelf (in Perl) geschreven webauthenticatiedaemon i.c.m. een in php geschreven authenticatie class. Dat geheel werkt al een jaartje of 5 zeer betrouwbaar met tienduizenden users.

Ander idee: Als het om enquetes gaat en als de gebruikers allemaal bekende mailadressen hebben zou je iedere gebruiker een mailtje met het verzoek om de enquete in te vullen kunnen sturen. In dat mailtje neem je dan een unieke link op, bijv:

http://www.server.nl/enqu...c878f0b9c32d13454f1ca8c98

Door het klikken op die link kan een gebruiker eenmalig de enquete invullen.

Dit laatste systeem heb ik wel eens toegepast om enquetes door externe gebruikers te kunnen laten invullen. Mensen waarvoor ik geen authenticatie kon gebruiken.

Verwijderd

Topicstarter
Een e-mail adres kan niet. Er zijn geen mailadressen van de leerlingen bekend. De oplossing: voer de combinatie van leerlingnr, naam, klas, mentor in, had ik al, maar vind ik zelf niet zo heel erg veilig. Ik zelf had totaal geen moeite om via een omweg deze gegevens van alle leerlingen uit het schoolsysteem te halen. Vandaar dat ik het liefst met de windows login zou willen werken.

Het maakt mij overigens niet uit of er bij de oplossing van dit probleem gebruik wordt gemaakt van java of php, zolang het maar een website blijft.

Is er niet ergens een plaats waar windows de naam van de gene die op dat moment is ingelogd bewaart?

Ik geef eerlijk toe dat ik nog zeer weinig ervaring met php heb dus hou het graag een beetje in begrijpelijke mensentaal _/-\o_

btw, ik denk niet dat systeembeheer het erg op prijs stelt als ik allerhande software moet installeren op de server.

[ Voor 8% gewijzigd door Verwijderd op 06-02-2005 13:33 ]


  • Skaah
  • Registratie: Juni 2001
  • Laatst online: 21-11 16:32
Kickasz schreef op zondag 06 februari 2005 @ 13:16:
Gevonden: :9

Hier wordt uitgelegd hoe je LDAP moet koppelen aan PHP _/-\o_

http://asia.cnet.com/buil...,39009336,39105862,00.htm

Succes er mee!
Hiermee kun je dus tegen windows authenticeren (Active Directory)

Verwijderd

Topicstarter
Ik ga morgen weer eens met systeembeheer praten over de mogelijkheden op dit gebied. Weet iemand toevallig of de LDAP server toevallig standaard geïnstalleerd staat op een windows 2003 server (uit mijn stoffige geheugen gravend d8 ik dat ze een windows 2003 server voor het netwerk inloggen gebruikten). Als dit niet het geval is, wat moet er dan allemaal gedaan worden om zo'n server te installeren?

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

LDAP is een standaard onderdeel van Active Directory ja :)

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 23:31

alienfruit

the alien you never expected

NTLM authentication, kun je daar niet iets mee? Zo lang PHP draait onder Windows/IIS lijkt mij dat de makkelijkste oplossing.

Verwijderd

Topicstarter
Vanmiddag even langs gelopen bij systeembeheer, maar het idee van de LDAP server stond ze niet bepaald aan :P. Morgen kan ik mogelijk een gesprek met de hoofdsysteembeheerder regelen, maar dan wil ik wel fatsoenlijk zijn voorbereid op zijn vragen. Ik heb even een kleine opstelling gemaakt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
// LDAP variables
$ldap[&#8216;user&#8217;]              = $leerlingnummer;
$ldap[&#8216;pass&#8217;]              = $leerlingwachtwoord;
$ldap[&#8216;host&#8217;]              = &#8216;IpLdapServer&#8217;;
$ldap[&#8216;port&#8217;]              = 389;
$ldap[&#8216;dn&#8217;]          = &#8216;cn&#8217;.$ldap[&#8216;user&#8217;].&#8217;,ou=Department,o=Company Name&#8217;;
$ldap[&#8216;base&#8217;]              = &#8216;&#8217;;
 
// connecting to ldap
$ldap[&#8216;conn&#8217;] = ldap_connect( $ldap[&#8216;host&#8217;], $ldap[&#8216;port&#8217;] )
or die( &#8220;Could not connect to server {$ldap[&#8216;host&#8217;]} );
 
// binding to ldap
$ldap[&#8216;bind&#8217;] = ldap_bind( $ldap[&#8216;conn&#8217;], $ldap[&#8216;dn&#8217;], $ldap[&#8216;pass&#8217;] );
 
if( !$ldap[&#8216;bind&#8217;] )
{
    //leerlinggebruikersnaam/ leerlingwachtwoord is incorrect!);
    exit;
}
else {//leerlingwachtwoord is correct.
$ldap_close( $ldap[&#8216;conn&#8217;] );
//code om naar enquete formulier te gaan.

}
 
//code voor foutmelding
?>


Zou iemand deze code voor mij kunnen nakijken op fouten? Het is absoluut niet de bedoeling dat er verbindingen blijven openstaan? Worden op deze manier alle verbindingen verbroken? Graag jullie meningen over verbeteringen (let op ik ben nog steeds een "beginner" vergeleken de meesten van jullie :9).

Kan iemand mij uitleggen wat het nut is van deze code:
$ldap[‘dn’] = ‘cn’.$ldap[‘user’].’,ou=Department,o=Company Name’;
Ik heb begrepen dat dit staat voor distinguished name, maar wat het nu eigenlijk inhoudt weet ik niet? Wat is het nut van die dn? Kan ik die er niet gewoon uitlaten?

Verwijderd

Ik heb zoiets wel vaker meegemaakt en zoals alienfruit al zei is NTLM een aardige optie.

Draai je je webserver onder IIS? Zet dan de beveiliging van die ene pagina waarop je de gebruikersnaam wilt hebben op 'no annonymous' ofzoiets. Dan heb je de beschikking over de REMOTE_USER variabele. Ook met apache kan het maar dan moet wel mod_ntlm draaien maar dat is opzich een fluitje van een cent. Dan kun je op iedere pagina de windowslogin opvragen. Dit werkt trouwens alleen als de webserver op het zelfde netwerk zit als de webserver....


Zo heb ik het tenminste opgelost in verschillende intranetten bij verschillende klanten.

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 23:31

alienfruit

the alien you never expected

Ja, voor mij werkt het ook prima. :)

  • PanMan
  • Registratie: November 1999
  • Laatst online: 20-11 18:44

PanMan

Spun!

Andere oplossing: (puur theorie, niet getest :))
Cookies worden onder IE/windows gewoon opgeslagen als kleine textfiles.
Zo heb ik bijvoorbeeld $USERNAME@gathering.tweakers[1].txt in C:\Documents and Settings\$USERNAME\Cookies (nee, dat is geen link, dat maakt Got er van..)
($USERNAME is mijn loginnaam).
Dit zijn simpele textfiles, met een paar regels. Het moet redelijk simpel zijn om het formaat uit te zoeken. Heb iig ff met google dit gevonden: http://www.littlepiggy.net/cookies/ie6.php (maar ook dat niet getest).
Nu komt de truuk: Je kan het systeembeheer vragen om bij het inloggen een cookie file neer te zetten op de juiste plaats, met daarin enkele gegevens. Bijvoorbeeld het leerlingnr. Maar als je het beter wil beveiligen kan je ook een hash nemen, en die in een db opslaan, samen met leerlingnummers. Als het goed is kan je dan die cookies weer opvragen in je site.
Nogmaals, ik heb het niet getest, maar het zou goed kunnen dat het werkt :). Als je het test: laat het even weten, ben wel benieuwd :).

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Zoek hier op het forum eens op het programmatje userserver onder mijn naam :)

Stop uploading passwords to Github!


  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 23-11 16:22
Dit kan heel simpel..

benodigdheden: IIS 6 (windows 2003) server.
Anynomous acces uitschakelen..

Wanneer de pagina nu bezocht wordt krijg je de Windows Gebruikersnaam in een server variabele (net als wat al eerder genoemd is voor gebruik bij ASP).

De server moet wel in het zelfde domein staan als de client, omdat aan de hand van de username van de client gekeken wordt of die in het active directory bestaat (of in die richting).

Ik heb het geheel ook draaien op me stage op bovenstaande manier.

/dev/null


Verwijderd

Dit werkt wel.. echter krijg je bij mij telkens een login prompt, en komt de username niet direct in de variabel te staan. De server draait onder het domein..op IIS6

Hoe is dit dan te veranderen?

  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Staat 'Integrated Authentication' oid aan, en gebruik je wel IE ? :)

Verwijderd

beide staan aan, maar blijf het login prompt krijgen.. :)

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 23-11 16:22
Verwijderd schreef op dinsdag 08 februari 2005 @ 19:42:
beide staan aan, maar blijf het login prompt krijgen.. :)
Ik zal morgen op me werk even kijken hoe het daar ingesteld staat, daar krijgen we geen login scherm vanaf 2000 en xp computers. 2003 computers willen wel schermpjes geven...

/dev/null


  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
PanMan schreef op dinsdag 08 februari 2005 @ 02:02:
Andere oplossing: (puur theorie, niet getest :))
Cookies worden .....
Elke klootviool kan cookies wijzigen. Dus nee, dit is niet bepaald een verstandige oplossing. Hmkay...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • PanMan
  • Registratie: November 1999
  • Laatst online: 20-11 18:44

PanMan

Spun!

Grijze Vos schreef op dinsdag 08 februari 2005 @ 21:24:
[...]

Elke klootviool kan cookies wijzigen. Dus nee, dit is niet bepaald een verstandige oplossing. Hmkay...
Dus? Dat is echt een BS argument. Jij zit ook hier op Got ingelogd via cookies. Die je zelf kan wijzigen. Maar het lukt je (als het goed is :)) niet om als mij ingelogd te raken. Terwijl je wel zelf je cookie kan aanpassen, zelfs naar mijn cookie. Maar de inhoud daarvan weet je niet (als het goed is :)). Dus echt een onzinargument. Alleen ff nadenken over dat je een goede unieke var in de cookie zet, b.v. een random hash, zoals ik al zei....

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • r0b
  • Registratie: December 2002
  • Laatst online: 26-10 09:42

r0b

PanMan schreef op woensdag 09 februari 2005 @ 01:29:
[...]


Dus? Dat is echt een BS argument. Jij zit ook hier op Got ingelogd via cookies. Die je zelf kan wijzigen. Maar het lukt je (als het goed is :)) niet om als mij ingelogd te raken. Terwijl je wel zelf je cookie kan aanpassen, zelfs naar mijn cookie. Maar de inhoud daarvan weet je niet (als het goed is :)). Dus echt een onzinargument. Alleen ff nadenken over dat je een goede unieke var in de cookie zet, b.v. een random hash, zoals ik al zei....
GoT gebruikt niet enkel dooie koekjes om te authenticeren, verder was de tip om de filename van een cookie te gebruiken, om hiermee te authenticeren.
Niet om daadwerkelijk met cookies te gaan werken.

En in dat geval, kan je inderdaad een cookie wijzigen (filename wijzigen van leerling12345@enquete.blaat.nl naar leerlng123251@enquete.blaat.nl )

Althans, als ik het goed begreep. :)

  • PanMan
  • Registratie: November 1999
  • Laatst online: 20-11 18:44

PanMan

Spun!

Ik heb het wellicht niet goed uitgelegd: Die $USERNAME is gewoon hier mijn username op Windows. Ik bedoelde (net als GoT, geloof ik), om een cookie te zetten met een ander progje, met daarin b.v. een hash. Deze kan je dan uitlezen in je site.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 23-11 16:22
Zoals beloofd een screenshot van hoe ik de beveiliging heb voor het intranet.

Afbeeldingslocatie: http://www.decramy.nl/GoT/Images/IIS.JPG

Krijg je wel een inlogscherm dan moet je de gebruiker laten inloggen met:
DOMEIN\USERNAME
PASSWORD

Doormiddel van de volgende code haal ik de username op:

PHP:
1
2
3
4
5
6
7
<?php
    $username_tmp = explode ("\\", $_SERVER["AUTH_USER"]); 

        if ($username_tmp[2]) { $username = $username_tmp[2]; } 
    elseif ($username_tmp[1]) { $username = $username_tmp[1]; }
    elseif ($username_tmp[0]) { $username = $username_tmp[0]; }
?>

/dev/null


Verwijderd

Topicstarter
Morgen heb ik een afspraak met systeembeheer en de afdelingsleiding kunnen maken. Ik laat jullie morgen avond weten of er al een oplossing uit de bus is gekomen (misschien LDAP). :*)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Cookies kun je wijzigen, maar als je een MD5 hash hebt van een leerling nummer (+ salt) dan voorkomt dat nog steeds fraude. De kans dat iemand het goed gokt is te verwaarlozen. Voor de zekerheid zou je die cookie dan wel een beperkte ACL moeten geven

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • Chaoss
  • Registratie: December 2000
  • Laatst online: 00:51

Chaoss

Moderator Spielerij

Professioneel boekemantsje

interresant topic, ik ben de laatste tijd ook wat aan het testen met IIS en beveiligde pagina's, ben overignes een grote noob wat dit betreft, normaal gesproken kom ik neit verder dan wat gewone html :P

ik heb hier een domein met daarin een dc met win2k en IIS waarop ik een intranet site heb draaien.

nu wil ik een pagina maken waar collega's persoonlijke info kunnen raadplegen dus ik heb onder de "intranet" Site een nieuwe Virtual Directory gemaakt: test ,met als local path: C:\Inetpub\intranet\test en daarin staat een bestandje test.html.

ik wil dus dat deze pagina niet door iedereen gezien kan worden maar een pagina met persoonlijke info. Om te beginnen heb ik bij de directory security anonymous acces uitgezet en alleen Basic Authentication staat aan want ik wil dat mensen echt een username en password moeten invullen.

vervolgens ga ik vanaf mijn pc naar http://intranet/test/test.html krijg een login scherm vul mijn user en pass in krijg de pagina te zien. Vervolgens probeer ik in te loggen met een ander acount in hetzelfde domein/active dir. en die krijgt geen toegang :? ik geef dat account admin rechten en krijg wel toegang.... vervolgens haal ik admin rechten weer weg bij dat acount en ik krijg nog steeds WEL toegang. :?

vaag... ik testen, pak een ander acount zonder admin rechten ga naar http://intranet/test/test.html en krijg geen toegang. ik geef het acount admin rechten, krijg vervolgens wel toegang... ik haal de admin rechten weer weg en kan nog steeds met dat acount inloggen... euh vaag?

iemand enig id wat er mis gaat met die rechten? ik voel me nu een beetje :? 8)7 :?

PSN: Wanderer200 | Switch: Wanderer


  • Mei
  • Registratie: Juni 2005
  • Laatst online: 17-10-2024

Mei

Klein beetje offtopic over het gedoe in februari.

Waarom laat je je leerlingen inloggen in Windows? Deze gegevens kunnen, dacht ik, gemakkelijk achterhaald worden door een stel slimmeriken. Handiger lijkt het mij dan om via een stukje software als Novell Netware (hebben wij toevallig) de gebruikers toegang te geven.

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Chaoss, open liever een nieuw topic waarin je verwijst naar dit topic. Zoals je nu al ziet wordt er gereageerd op een discussie die allang dood was en deze discussie voor de mensen die erover gingen waarschijnlijk niet eens meer speelt. Bovendien is een eigen topic handiger voor jou omdat je dan geen reacties op andere posts tussendoor gaat krijgen. :)

Open dus liever een nieuw topic. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.