Gå til innhold

gjøre et loggin-skript sikrere


Anbefalte innlegg

har laget et loggin-skript som jeg gjerne vil gjøre litt sikkrere..

skriptet ligger her..

 

her er en liten foklaring på hvorfor skriptet er usikkert, men jeg har noen spørsmål til hvordan jeg kan fikse på dette:

 

1. hvordan bruker man header(LOCATION:)? prøvd å lese meg frem til hva header() gjør, men aldri helt forstått detl..

2. vil skriptet mitt bli mye sikrere om jeg bruker sessions i stedet for cookies?

3. hva er en config fil? hvordan lager jeg denne/henter info fra den?

 

hadde vært supert å få svar på dette.. da skal skriptet med ett bli sikrere :)

takker for alle svar :)

 

EDIT: Post 300 :D

Endret av toss
Lenke til kommentar
Videoannonse
Annonse

1. hvordan bruker man header(LOCATION:)? prøvd å lese meg frem til hva header() gjør, men aldri helt forstått detl..

2. vil skriptet mitt bli mye sikrere om jeg bruker sessions i stedet for cookies?

3. hva er en config fil? hvordan lager jeg denne/henter info fra den?

1) Ved å bruke headr:locatian vil browsern gå til en annen side når du ha logget inn. Søk etter header location så finner du ut hvordan det benytes!

 

2) Ja

 

3)En config fil er bare en fil som du seter varibler i, som du kan bruke på flere sider. Lag f.eks. en config.php som inneholder $pass="mitt_passord" (helst kryptert). Da kan du få tak i denne varialben med include("config.php"); på loginsiden din.

Lenke til kommentar
3)En config fil er bare en fil som du seter varibler i, som du kan bruke på flere sider. Lag f.eks. en config.php som inneholder $pass="mitt_passord" (helst kryptert). Da kan du få tak i denne varialben med include("config.php"); på loginsiden din.

tusen takk for svar..

men hvis jeg lager en config.php, og setter permissions(chmod) til at bare owner kan lese, vil da skriptet kunne hente frem variabelene eller lese filen?

Lenke til kommentar

Kommer an på om brukeren som er "owner" er den samme brukeren som starter web-server applikasjonen...

 

Hvorfor vil du endre chmod?

 

Hvis noen går på www.minserver.no/config.php så får de bare opp en blank side, variablene blir ikke printet. Viktig å kalle den .php tilslutt!

 

Edit:

Hva med å bruke en .htaccess-fil til å beskytte i stedet?

Slipper du trøbbel med sessions, osv... :)

Endret av ZoRaC
Lenke til kommentar
Session blir lagret i minnet på serveren, mens cookies blir lagra på klienten sin PC.

Hvis jeg ikke tar helt feil.

Det er fortsatt ikke sammenlignbart. Serveren husker hvilke cookies som er logget inn, om maskin #2 hacker seg inn og stjeler cookiene etter at maskin #1 er logget ut, vil han fortsatt ikke komme inn.

 

Sessions bruker i nesten alle tilfeller cookies.

Lenke til kommentar
Hvorfor vil du endre chmod?

det var noe med at om php skulle slutte å fungere så ville alt bli printet ut, uten at filen kjøres.. se her, punkt tre

noen som kan forklare litt om forskjellen på user, owner og group er?

 

men noen som vet noe bra sted å lære om .htaccess? jeg kan jo google litt, men hvis noen kommer på noe bra i farten hadde joe det vært fint :)

Lenke til kommentar
Session blir lagret i minnet på serveren, mens cookies blir lagra på klienten sin PC.

Hvis jeg ikke tar helt feil.

Det er fortsatt ikke sammenlignbart. Serveren husker hvilke cookies som er logget inn, om maskin #2 hacker seg inn og stjeler cookiene etter at maskin #1 er logget ut, vil han fortsatt ikke komme inn.

 

Sessions bruker i nesten alle tilfeller cookies.

I dette tilfeller så stemmer det at en overgang fra cookies til session vil medføre en stor sikkerhetsforbedring, da scriptet bygger på at $var = true i en cookie så får man tilgang. Cookies har default lang utløpstid, og det er bare å åpne cookies filen i en teksteditor for å se hvordan scriptet fungerer.

 

At det medfører at scriptet blir mye sikrere å bare gå over til sessions er jeg ikke helt enig i.

 

toss

For info om htaccess så burde du bruke google.com - det finnes mange avanserte funksjoner utover passordbeskyttelse.

 

Owner er den brukeren som har opprettet. Når du f.eks. oppretter en fil med et ftp program så er det den brukeren du er logget inn som er eieren av filen. I tillegg så kan du gi brukergruppen rettigheter til filen. Og så er det hvilken rettighet andre brukere skal ha til filen.

Endret av ????????
Lenke til kommentar
I dette tilfeller så stemmer det at en overgang fra cookies til session vil medføre en stor sikkerhetsforbedring, da scriptet bygger på at $var = true i en cookie så får man tilgang. Cookies har default lang utløpstid, og det er bare å åpne cookies filen i en teksteditor for å se hvordan scriptet fungerer.

Nei, man trenger ikke bruke $var = true i en cookievar for å vise loginstatus - de gangene jeg selv har brukt cookies har jeg hatt server side control over hvilke cookies som er innlogget, hvilket jeg også beskriver i mitt svar.

Lenke til kommentar
I dette tilfeller så stemmer det at en overgang fra cookies til session vil medføre en stor sikkerhetsforbedring, da scriptet bygger på at $var = true i en cookie så får man tilgang. Cookies har default lang utløpstid, og det er bare å åpne cookies filen i en teksteditor for å se hvordan scriptet fungerer.

Nei, man trenger ikke bruke $var = true i en cookievar for å vise loginstatus - de gangene jeg selv har brukt cookies har jeg hatt server side control over hvilke cookies som er innlogget, hvilket jeg også beskriver i mitt svar.

Det er derfor jeg kun påpeker at det gjøres her, og sier at det ikke er en god løsning.

Lenke til kommentar

For å forklare det litt lett, så tenk deg at en server har flere brukere. Hver av disse brukerne får et brukernavn, slik at de kan f.eks. logge seg inn på kontrollpanelet eller logge seg inn via ftp og laste opp filer. Det brukernavnet man logger seg inn med er da en bruker.

 

Når denne brukeren laster opp en fil så er denne brukeren eiern av filen. Mange hoster støtter også ssh, da kan man logge seg inn på serveren og opprette filer på lignende måte som mang gjorde før i DOS. Da logger man seg også inn som en bruker, og da blir denne brukeren eieren av filen.

 

Når det der i mot er en som surfer som kikker på siden din, så er den ikke logget inn som din bruker eller en bruker i gruppen din. De er derfor en annen (other) bruker.

 

Når programmer eller prosesser kjøres på serveren så er det brukeren som kjører de, selv om det f.eks. er automatisk via en cron job.

 

Tenk deg at du logger inn på windows med bruker og oppretter en fil. Da er denne brukeren eieren av filen. Dersom noen andre i nettverket til PC'en vil se på filen så er den brukeren "other" dersom du ikke har den i gruppen bland brukere.

 

Ble det noe klarere av det, eller bare mer forvirrende?

Lenke til kommentar

det ble absolutt klarere..

så siden jeg ikke har flere brukere på min ftp-host, så har jeg ikke noen group?

alt jeg egentlig må forholde meg til er owner og other?

 

og en i gruppen kan logge inn med en ftp-program, men bare gjøre de tingene jeg gir ham tillatelse til selv om han bruker et ftp-program?

 

kan hende jeg har misset totalt.. :roll:

Lenke til kommentar

Man kan godt lagre feks username eller id i cookies. Trikset er å hashe den infoen du putter i cookien med en verdi (denne må ikke komme på avveie!)

 

skriver cookien:

$secret_word = 'finnpånoe';

$id = "test";

$hash = md5($secret_word.$id);

setcookie('id',$id.'-'.$hash, time()+3600);

henter ut cookien:

 

list($cookie_id,$cookie_hash) = explode('-',$_COOKIE['id']);

if (md5($secret_word.$cookie_id) == $cookie_hash) {

$id = $cookie_id;

//gjør noe, feks sett en session

 

} else {

die('Invalid cookie.');

}

Endret av Os|r|s
Lenke til kommentar

har dette jeg:

 

<?
//deklarering av form variabler
$e_post=$_POST['email'];
$passord=$_POST['passw'];

//sikkerhet og formatering
$password = md5($passord);
$esc = mysql_escape_string($e_post);
$ep = addslashes($esc);

//database snakk
mysql_connect ("host:port", "user", "pass") or die ('My SQL Error: ' . mysql_error());
mysql_select_db ("db");
$query = mysql_query("SELECT epost, passord, fornavn, etternavn FROM tabell WHERE epost='$ep'") or die("MySQL Login Error: ".mysql_error());
$row = mysql_fetch_array($query);

//hente ut fra rader
$mail = $row["epost"];
$pwd = $row["passord"];
$fnavn = $row["fornavn"];
$enavn = $row["etternavn"];

//printe ut
echo "<br>";
if (($esc == $mail) && ($password == $pwd)):
   echo "Du er nå logget inn som: $fnavn $enavn";
elseif (($esc == $mail) && ($password != $pwd)):
   echo "feil passord, prøv igjen";
else:
   echo "feil bruker, er du registrert?";
endif;
?> 

 

kommentarer?

Lenke til kommentar

ja, 2:

 

hvorfor gjør du dette?

$esc = mysql_escape_string($e_post);
$ep = addslashes($esc);

 

begrunn gjerne svaret med manualreferanser.

 

Denne kodesnutten:

if (($esc == $mail) && ($password == $pwd)):
  echo "feil passord, prøv igjen";

 

vil være noe ulogisk da du matcher epost i databasen mot epost fra form. Så du kan begynne med å se om du får noe fra databasen, (husk at en tom array er boolean FALSE). Det du da vil risikere å få, er en tom array i mysql_fetch_array (hvorfor ikke bruke mysql_fetch_assoc?), og da er det bedre med koden:

 

if(!$row){
//eposten ikke registrert
}
elseif($password==$pwd){
//login ok
}
else{
//login ikke ok
}

Endret av Torbjørn
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...