Magnus Holm Skrevet 6. juni 2005 Del Skrevet 6. juni 2005 Håper dere kan få bruk for dette scriptet Jeg har ikke stor peiling på sikkerhet, så det hadde vært fint med tilbakemelding. //index.php: <?php include("pass.php"); if (!isset($_GET['logg'])) { ?> <form action="<?php print $_SERVER['PHP_SELF']; ?>?logg=ja" method="post"> Brukernavn: <input type="text" name="user"><br /> Passord: <input type="password" name="pass"><br /> <input type="submit" value="Logg inn!"> </form> <?php } else if ($_GET['logg'] == "ja") { passord("logged.php"); } ?> // pass.php <?php session_start(); function passord($neste) { $brukernavn = $_POST['user']; $passord = sha1(md5($_POST['pass'])); $file = file_get_contents('pass.txt'); $lines = explode("\n", $file); $top = count($lines); for ($i = 0; $i < $top; $i++) { $all = $lines[$i]; $new = explode("|", $all); $new[1] = trim($new[1]); if (($brukernavn == $new[0]) && ($passord == $new[1])) { $_SESSION['auth'] = $new[2]; header("Location: $neste"); } } echo "Feil passord"; } ?> Okey... Dette er standar scriptene. Det øverste er bare en logginn-form, mens den nederste er innlogginga. Her er min hemmelig side "logged.php", hvis du vil ha noe annet så er det bare å endre: passord("filnavn_til_beskyttet_fil.php"); // logged.php <?php session_start(); if ($_GET['logg'] == "ut") { $_SESSION['auth'] = ''; header("Location: index.php"); } if ($_SESSION['auth'] >= 1) { echo 'Du er admin!'; include ("add.php"); } if ($_SESSION['auth'] >= 0) { ?> <p>Dette er hemmelig informasjon! Din status: <?php echo $_SESSION['auth']; ?></p> <p><a href="?logg=ut">Logg ut!</a></p> <?php } if (!isset($_SESSION['auth'])) { header("Location: index.php"); } ?> $_SESSION['auth'] inneholder statusen din. Hvis du har status 1, er du admin. Mens 0 er vanlig. if ($_SESSION['auth'] >= 1) { // Hvis statusen din er lik eller høyere 1, skjer dette! } if ($_SESSION['auth'] >= 0) { // // Hvis statusen din er lik eller høyere 0, skjer dette! } Her den eneste forskjellen fra 1 og 0 at 1'ern kan legge til nye brukere. (SE: include("add.php"); ) Dette kan selvfølgelig endre selv;) // add.php <?php session_start(); if ($_SESSION['auth'] == '') { header("Location: index.php"); } else {?> <h4>Brukerregistrering:</h4> <form action="<?php print $_SERVER['PHP_SELF']; ?>?add=yes" method="post"> Brukernavn: <input type="text" name="bruker"><br /> Passord: <input type="text" name="passwd"><br /> Status: <input type="text" name="status"><br /> <input type="submit" value="Legg til!"> </form> <?php if ($_GET['add'] == "yes") { $file = 'pass.txt'; $leggtil = "\n".$_POST['bruker']."|".sha1(md5($_POST['passwd']))."|".$_POST['status']; $handle = fopen($file, 'a'); if (fwrite($handle, $leggtil) === FALSE) { echo "Greide ikke å legge til bruker!"; exit; } echo "Ny bruker lagt til!"; } } ?> Ikke rediger annent enn echo i dette scriptet! Brukernavn, passord, og status lagres i filen: pass.txt. Passord lagres som sha1+md5 // pass.txt admin|a69681bcf334ae130217fea4505fd3c994f5683f|1 Her er brukernavn: admin og passord: demo Lenke til kommentar
Magnus Holm Skrevet 6. juni 2005 Forfatter Del Skrevet 6. juni 2005 Her er et sha1+md5-krypteringsscript: <?php if (!$_GET['md5']) { ?> <form action="md5.php" method="get"> <input type="text" name="md5"> <input type="submit" value="Send"> </form> <?php } else if ($_GET['md5']) { $finish = sha1(md5($_GET['md5'])); echo $finish; } ?> Lenke til kommentar
zokra Skrevet 6. juni 2005 Del Skrevet 6. juni 2005 Det er vel sikrere og enklere å bruke feks md5 og salt i stede for både sha1 og md5... Lenke til kommentar
Ernie Skrevet 6. juni 2005 Del Skrevet 6. juni 2005 (endret) Dette er dessverre ikke sikkert overhode. Sett at noen skaffer seg en annens sessionid? Da er man automatisk innlogget, noe som nok ikke var meningen. Derfor: sjekk ALLTID for hver eneste side at brukerens IP og browser stemmer over ens med det du lagerer i session. Det vil gjøre det en del mer sikkert, men selv ikke da er tingene perfekt. Riktig nok sikkert til vanlig bruk. Edit: Dum skrivefeil Endret 7. juni 2005 av Ernie. Lenke til kommentar
Magnus Holm Skrevet 7. juni 2005 Forfatter Del Skrevet 7. juni 2005 Og hvordan skaffer man seg: "en annens sessionid" ? Lenke til kommentar
Zoxc Skrevet 7. juni 2005 Del Skrevet 7. juni 2005 SessionID blir lagret i cookies. Derfor vis noen lokker deg til å gå på ein side kan de stjele session ID'en din, dette fikser du med å skjekke IP'en. Lenke til kommentar
Magnus Holm Skrevet 7. juni 2005 Forfatter Del Skrevet 7. juni 2005 Men da kan man vel bare logge som på en maskin... Hvis jeg tenker på samme måte som deg? Lenke til kommentar
Ernie Skrevet 7. juni 2005 Del Skrevet 7. juni 2005 Men da kan man vel bare logge som på en maskin... Hvis jeg tenker på samme måte som deg? Nei, du kan logge inn uavhengig av hvor du har logget på, hvor mange ganger osv. Ved ny pålogging får du jo ny sessionid med tilhørende ny cookie. Dessuten er en session typisk gyldig 30 minutter i PHP. Lenke til kommentar
Medrakil Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 Det er vel sikrere og enklere å bruke feks md5 og salt i stede for både sha1 og md5... salt? Og holder ikke md5 alene? Lenke til kommentar
zokra Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 Det er vel sikrere og enklere å bruke feks md5 og salt i stede for både sha1 og md5... salt? Og holder ikke md5 alene? function makesalt(){ $hash_string = md5(time()); $stringlength = strlen($hash_string); $saltlength = 15; $start = rand(0, ($stringlength - $saltlength - 1)); $salt = substr($hash_string, $start, $saltlength); return $salt; } $passord=md5(makesalt().$passord); Da blir passordet hashet sammen med 15 andre tegn, altså 15 tegn+ passord, jo lenger salt, jo lengre tid vil det ta å breakforce md5-hashen Lenke til kommentar
genstian Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 det blir sikkert når du poster til serveren med javascript md5(sha1("passord")) og så md5($salt_1_til_64 . $passord . $salt_2_til_128) i php og så sjekke opp mot database. Lenke til kommentar
Torbjørn Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 er det riktig at pass.txt ligger tilgjengelig for omverdenen? Lenke til kommentar
genstian Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 er det riktig at pass.txt ligger tilgjengelig for omverdenen? ja Lenke til kommentar
zokra Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 det blir sikkert når du poster til serveren med javascript md5(sha1("passord")) og så md5($salt_1_til_64 . $passord . $salt_2_til_128) i php og så sjekke opp mot database. Blir ikke noe av vitsen borte da? Dessuten krever det jo en god del kode i javascript... Lenke til kommentar
Gjest Slettet+6132 Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) er det riktig at pass.txt ligger tilgjengelig for omverdenen? Ehm? Om det skal ligge i webmappa ta i det minste og gjør slik: pass.php <?php die("Piss off motherfucker, you can't read here!"); ?> olanordmann;hashetpassord jens;passordhash Endret 9. juni 2005 av Slettet+6132 Lenke til kommentar
genstian Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 det blir sikkert når du poster til serveren med javascript md5(sha1("passord")) og så md5($salt_1_til_64 . $passord . $salt_2_til_128) i php og så sjekke opp mot database. Blir ikke noe av vitsen borte da? Dessuten krever det jo en god del kode i javascript... du kan jo sende det i bare md5/sha1 også. hvis du mente at vitsen blir borte med javascript så vil jeg si at javascript bare sikkrer den litt extra ikke noe mer. Lenke til kommentar
Torbjørn Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) er det riktig at pass.txt ligger tilgjengelig for omverdenen? Ehm? Om det skal ligge i webmappa ta i det minste og gjør slik: pass.php <?php die("Piss off motherfucker, you can't read here!"); ?> olanordmann;hashetpassord jens;passordhash det hjelper da ingenting så lenge fila heter .txt kall fila isåfall .htpass.txt, da vil ikke apache tillate at du leser fra den EDIT: ser du kalte fila pass.php ja Endret 9. juni 2005 av Torbjørn Lenke til kommentar
pian Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) Leser du litt nøyere så står det faktisk pass.php <?php die("Piss off motherfucker, you can't read here!"); ?> olanordmann;hashetpassord jens;passordhash og da funker det. Endret 9. juni 2005 av pian Lenke til kommentar
Gjest Slettet+6132 Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 (endret) Leser du litt nøyere så står det faktisk pass.php Noen som er våkne :!: EDIT: Som en regel skal man ALLTID lagre database-stuff og slikt i php-filer som ikke vil bli leselige for brukeren. Endret 9. juni 2005 av Slettet+6132 Lenke til kommentar
Torbjørn Skrevet 9. juni 2005 Del Skrevet 9. juni 2005 joda, jeg skrev en korreksjon og håpet den skulle i tide. Trådstarter: hva slags bakgrunn har du som programmerer? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå