[PHP] LDAP inlogsysteem, veilig?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Hallo,

Ik ben op dit moment bezig met een inlogsysteem voor een webomgeving (PHP, MySQL) waarbij gebruikers worden geauthenticeerd d.m.v. de gebruikersgegevens in Active Directory. Dit wil ik doen dmv de functie ldap_connect(); en ldap_bind(); .
Nu lukt mij dit al aardig, maar ik vraag mij af of ik dit wel veilig genoeg doe met betrekking tot het ingevulde password. Nu doe ik dit als volgt; De gebruiker vult zijn gebruikersnaam en wachtwoord in en met deze maken we verbinding met de LDAP-server. Wanneer de verbinding gelukt is, krijgen we een boolean TRUE terug. dit gaat ook goed. Het probleem is dat de POST-var met het wachtwoord niet versleuteld wordt verzonden van client naar server en ik vraag mij af of dit wel verantwoordelijk is?

Mits ik dit kan versleutelen met MD5 icm SHA1 zou ik graag willen weten hoe dit gedaan kan worden, omdat ik de wachtwoorden niet kan vergelijken...

Dit is mijn script;
PHP:
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<table class="logintable">
<tr>
    <td>Gebruikersnaam</td>
    <td><input name="username" type="text" id="username" <?php if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['username'])) { ?> value="<?php echo $_POST['username']; ?>"<?php } ?> />&nbsp;<span title="De gebruikersnaam is vereist." style="color:red;visibility:block;">*</span></td>
</tr>
<tr>
    <td>Wachtwoord</td>
    <td><input name="password" type="password" id="password" />&nbsp;<span title="Wachtwoord is vereist." style="color:red;visibility:block;">*</span></td>
</tr>
<tr>
    <td colspan="2"><input type="submit" name="login" value="Aanmelden" id="login" />&nbsp;<span style="visibility:hidden;">*</span></td>
</tr>
</table>
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (trim($_POST['username']) == "") {
        die('Er is geen gebruikersnaam ingevuld!');
    }
    if (trim($_POST['password']) == "") {
        die('Er is geen geldig wachtwoord ingevuld!');
    }
    // opvangen ingevulde username
    $username = strtolower(trim($_POST['username']));
    // opvangen ingevuld wachtwoord
    $password = $_POST['password'];
    // Domeincontroller definieren (UNC-naam of IP)
    $server = "webserver-01";        
    // maak verbinding met domeincontroller
    $connect = ldap_connect($server) or die('Server \'webserver-01\' niet beschikbaar!');
    // verbinden met de domeincontroller op basis van username en password ingevuld 
    $bind = ldap_bind($connect,$username."@domain.com",$password) or die('Aanmelding mislukt!');
    // Verifieren van verbinding. Indien ok, ga door naar website, anders ga terug naar inlogpagina met foutmelding.
    if ($bind == true) {
        echo 'Verificatie OK!';
        // stel sessie-vars in na goede verificatie
        $_SESSION['inlogstatus'] = 1;
        $_SESSION['inloguser'] = ucfirst($username);        
        $_SESSION['inlogtijd'] = date('G:i:s'); 
        $_SESSION['inlogverlooptijd'] = date('G:i:s', mktime(date('G'), date('i')+30, date('s')));
        // vernietig var met password
        unset($_POST['password']);
        // ga naar de index van /db v3
        header("Location: index.php?afd=1");
    } else { .. }
}
?>

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

MD5 en SHA1 zijn geen encryptiemethoden, enkel hashing methoden. Daar heb je dus niks aan. Als jij je zorgen maakt om de veiligheid, begin al eens met HTTPS. Dat zou in principe al voor een afdoende beveiligde verbinding moeten zorgen.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

burrug schreef op dinsdag 02 december 2008 @ 09:03:
Het probleem is dat de POST-var met het wachtwoord niet versleuteld wordt verzonden van client naar server en ik vraag mij af of dit wel verantwoordelijk is?
Dit probleem heeft niets met LDAP te maken. Hoe je iemand ook authenticeert: je zal op een of andere manier de authenticatiegegevens van de client naar de server moeten krijgen. Of je dat plaintext of gehashed doet hangt niet van de gebruikte authenticatiemethode af.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ah ok, dus als ik de wachtwoorden hash, komen ze wel bij de server aan als zijnde plaintext?

SSL-certificaten en HTTPS ben ik inderdaad al mee bezig, maar dit is nog niet afgerond. Hiernaast zou ik het ook gewoon veilig willen hebben :)

Alvast bedankt voor de snelle reacties!

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

burrug schreef op dinsdag 02 december 2008 @ 09:15:
Ah ok, dus als ik de wachtwoorden hash, komen ze wel bij de server aan als zijnde plaintext?
Verdiep je eens in wat hashes zijn. Met een hash kan je "nooit" terug naar de oorspronkelijk value.

Stel dat mijn password "Erkens" is en dat een hash daarvan "1234" is (simpel voorbeeld) uit die hash kan ik dan nooit meer het woord "Erkens" halen, dat is onmogelijk. Een hash kan je prima gebruiken om een password op te slaan, hierdoor is deze niet meer te lezen, maar wel te vergelijken.

Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Erkens schreef op dinsdag 02 december 2008 @ 09:19:
[...]

Verdiep je eens in wat hashes zijn. Met een hash kan je "nooit" terug naar de oorspronkelijk value.

Stel dat mijn password "Erkens" is en dat een hash daarvan "1234" is (simpel voorbeeld) uit die hash kan ik dan nooit meer het woord "Erkens" halen, dat is onmogelijk. Een hash kan je prima gebruiken om een password op te slaan, hierdoor is deze niet meer te lezen, maar wel te vergelijken.
Ja ok, zo snap ik em inderdaad wel, dit is dus handig als je een gebruikersmanagement in bijv. MySQL hebt oid.
Maar de enige manier om de passworden versleuteld te houden, is dus dmv SSL/HTTPS?

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • Kokkers
  • Registratie: Oktober 2000
  • Laatst online: 21:19
Als je het helemaal netjes wil doen gaan je LDAP calls naar de AD aan de achterkant over (secure) LDAPS (via TLS) maar dat was je vraag niet en daar zit je probleem ook niet denk ik.

Volgens mij kom je met AD <--LDAPS--> webserver <--HTTPS--> al een heel eind.

Het leuke met centrale authenticatie is dat de gebruikte credentials ook interessanter worden omdat deze waarschijnlijk toegang hebben tot meerdere systemen.

[ Voor 23% gewijzigd door Kokkers op 02-12-2008 13:48 ]


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ik ga eens kijken naar HTTPS en hoe of wat voor LDAPS..

Bedankt voor de reacties!

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • burrug
  • Registratie: April 2005
  • Laatst online: 14-10-2024
Ik ben mij even gaan verdiepen in HTTPS en TLS etc.
Nu hebben wij een hostingpakket bij onze provider voor onze website, hiernaast ook bij deze webhost een submap als; www.domein.nl/intranet. In deze map 'intranet' staat een index-file welke doorlinkt naar onze interne webserver. Zou een SSL-versleuteling op de webhost www.domein.nl al voldoende zijn, of is een SSL-verbinding op de interne webserver noodzakelijk?

Even duidelijker;

De index file is een framespagina bestaande uit 2 frames, van welke het ene frame leeg en onzichtbaar is, en het andere frame gevuld wordt met de externe pagina afkomstig van onze interne webserver.
Dit zodat het adres in de adresbalk niet wijzigt..

Zou dit overigens ook met IPSec kunnen?

[ Voor 27% gewijzigd door burrug op 02-12-2008 12:27 . Reden: nog een vraag ]

Tannoy Revolution R3 105W 6ohm, Marantz PM-7003 2x70W 8ohm, 2x JVG goud/goud, Marantz CD-6003, Marantz ST-6003


Acties:
  • 0 Henk 'm!

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
Je wilt een beveiligde verbinding hebben met de server die de pagina's afhandelt waar vertrouwelijke gegevens ingevuld worden. Ofwel, alleen HTTPS naar je interne webserver. En als je je interne netwerk niet kan vertrouwen, wellicht ook van je interne webserver een beveiligde verbinding naar de AD (heb zelf de PHP libraries voor LDAP niet gebruikt, maar met de windows LDAP API (waar deze op gebaseerd is) is een beveiligde LDAP vebinding iets wat "out-of-the-box" ondersteund wordt).

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]


Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Erkens schreef op dinsdag 02 december 2008 @ 09:19:
[...]

Stel dat mijn password "Erkens" is en dat een hash daarvan "1234" is (simpel voorbeeld) uit die hash kan ik dan nooit meer het woord "Erkens" halen, dat is onmogelijk.
offtopic:
tis alleen onpraktisch onwaarschijnlijk, niet onmogelijk ;) rainbow tables, algorithm weaknesses en bruteforcing ftl

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • sariel
  • Registratie: Mei 2004
  • Laatst online: 22-05-2024
Even wacht inputvalidatie toevoegen aub. Als ik als gebruikersnaam of wachtwoord dinges@ invoer kan hier wel eens iets goed fout gaan.
En waarom strtolower je de gebruikersnaam? Aat maakt het hacken eigenlijk alleen maar makkelijker.
Verder is het misschien aan te bevelen om een IP adres aan de sessie gekoppelen ivm session hijacking en hier elders natuurlijk een controle op te doen. Wijzigt IP adres, uitloggen. Eventueel kan hetzelfde gedaan worden met useragent of andere statische browser-waardes.
unset($_POST['wachtwoord']) is trouwens niet nodig. Het maakt wat geheugen vrij, maar die paar bytes maken niet een hele hoop uit tenzij je wel heel erg krap in het geheugen zit.

[ Voor 67% gewijzigd door sariel op 02-12-2008 14:33 ]

Copy.com

Pagina: 1