21. januar 2004 - 22:21Der er
11 kommentarer og 1 løsning
htpasswd.exe (apache windows) krypter PHP
Hej Jeg har i et stykke tid nu kørt med htaccess på min workstation (windows XP), men nu er det begyndt og blive ofte der er andre end mig selv som skal se nogen ting der på. Dette giver problem med at de skal have et brugernavn og password, jeg har bare været gået ind i min .htpasswd fil og tilføjet: guest: da jeg ikke gider ind og kryptere m.m., men dette er jo bestemt ikke effektivt hvis der er flere og flere som nogen gange skal have adgang... Jeg vil derfor lave en side så jeg kan styre min .htpasswd fil via en PHP side, og på den måde give folk brugernavn og password. Nu kommer mit problem så: På linux/unix kan man bruge: $krypPasswd = crypt("$passwd",base64_encode("$passwd")); og så er det krypteret, men da apache på windows ikke benytter den samme form for kryptering skal jeg bruge en exe fil der følger med apache (htpasswd.exe), denne skal køres fra en Command Prompt og der er en del muligheder for at kryptere, jeg har indtil videre bare brugt standard på windows (ifølge den: MD5) men en kryptering af kommandoen: htpasswd -c test.txt admin og passwordet: test giver outputtet: admin:$apr1$bX5.....$N8ZOpOPnEfmdZxZfq3iZI. Altså passwordet er krypteret: $apr1$bX5.....$N8ZOpOPnEfmdZxZfq3iZI.
Nu skulle man tro at en md5() i PHP ville give det samme, men det giver: 098f6bcd4621d373cade4e832627b4f6 Men da jeg har fundet ud af den bruger crypt() bliver det næste påfund crypt($pw,md5($pw)) hvilket giver: 09al6vNID5onY Efter et kig på php.net/crypt kan man se md5 bruges sådan her: crypt($pw,CRYPT_MD5); men det giver: 1$MDgPcadkr82
Jeg er nu løbet tør for idéer og håber der er nogen som har læst mit rimlig lange spørgsmål igennem og kan svare på hvordan jeg får krypteret det med PHP? Hvis det ikke kan lade sig gøre - er der så en anden måde hvor på jeg kan styre brugerne?
Har ikke tidligere prøvet og køre exe filer, men har hørt det skulle være rimlig besværligt og give mange problemer, men du har måske gode erfaringer med det?
Jeg kiggede lige lidt på exec og det ser ikke så svært ud, følgende retunerer et krypteret password: $krypteret = exec("htpasswd -nb ".$bruger." ".$pw.""); $krypteret=str_replace($bruger.":", "", $krypteret);
Men nu har jeg lige lagt mærke til noget: Når jeg krypterer det samme password flere gange giver det forskellige resultater, fx giver: brugernavn: admin password: test Følgende output hvor det er det samme jeg krypterer igen og igen: admin:$apr1$wk/.....$OGsDBWqtwsUBJstsNwMye0 admin:$apr1$4n/.....$QluBOMudxFZWUxL7ksgJq1 admin:$apr1$kn/.....$FoF7L9iQ8vpm7gOezIxMF1 admin:$apr1$Bo/.....$fS3GU5.BWLwqGQhAFEth..
og det bliver ved med at ændre sig.. Hvorfor gør den det? Kan den tjekke om et password er korrekt hvis det er forskelligt fra gang til gang når den krypterer? :S
Nu skal jeg vist i seng, kan jeg jo bare tjekke.. Fik lige en anden til det da jeg selv har adgang med min IP uden og skulle skrive password, og ja det kan den sørme.. Takker for idéen til at bruge exec, smid lige et svar så du kan få pointne, og kan du evt. svare på hvorfor den kan finde ud af det med flere forskellige password-krypteringer?
Den må jo kryptere passwordet flere gange og tjekke det, måske en form for ekstra sikkerhed.. I hvert fald virker det og du skal have tak for hjælpen :)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.