kjetil_b Skrevet 12. mai 2006 Del Skrevet 12. mai 2006 Driver å lager et CMS til eget bruk, og har mye ferdig nå. Har fått til et fint login system, men vet ikke hvor trygt det er. Du skriver inn brukernavn og passord, stemmer det, så opprettes en midlertidig cookie fil med en id som matches med brukeren i databasen. Det jeg tror, som jeg ikke har fått bekreftet, er at hvis noen bare oppretter en cookie selv, så kan de få tilgang til administrasjonen. Er rett og slett litt usikker på hvordan jeg skal gjøre dette. Har søkt mye og lest en del. Har faktisk et par bøker også, men de forklarer ikke dette så godt, og i allefall ikke i forhold til å bruke dette til innlogging på en sikker måte. Tenkte først å bruke sessions, men kom fram til at jeg ikke skjønte noe av det, så prøvde med cookies først. Noen som har forslag hva som bør gjøres? Tenkte å opprette et tilfeldig tall som lagres i cookien, men folk kan jo alltids finne ut det. Lenke til kommentar
Torbjørn Skrevet 14. mai 2006 Del Skrevet 14. mai 2006 (endret) hvordan ser cookien ut? hvis den er tilfeldig med mange tegn, skal det noe til å klare å opprette en cookie som matcher administrator login. hvorfor ikke bruke CGI::Session? Endret 14. mai 2006 av Torbjørn Lenke til kommentar
kjetil_b Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 Cookien inneholder bare en id som matcher ide'en i databasen. Kan kanskje opprette et tilfeldig nummer med mange tegn. Jeg prøvde lenge å lære meg CGI::Sessions, men skjønte ikke helt hvordan det fungerte. Har du link til en god tutorial? Har søkt litt, og lest dokumentasjonen, men klarte ikke å henge med. Lenke til kommentar
Torbjørn Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 (endret) jeg kan vise her: #!/usr/bin/perl use strict; use warnings; use CGI; use CGI::Session; my $cgi = new CGI; my $session = new CGI::Session ( $cgi ); ## bruker er nå unikt identifisert via $session, ## alle parametere som settes i $session er kun for denne brukeren ## f.eks: if( loginforsøk ){ ## $session->param('username', 'truls'); ## el.. } print $session->header; EDIT: iik.. glemte strict og warnings Endret 15. mai 2006 av Torbjørn Lenke til kommentar
kjetil_b Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 Takk for svar og kode, Torbjørn! Har satt opp det nå, og får kjørt scriptet. Sjekker med databasen min, og godkjenner brukernavn og passord. $session->param('username', 'truls'); Dette er altså det som setter inn informasjonen i session'en? Blir dette noe sånt: username:truls? Eller er det to unike variabler? Altså: username,truls? Og jeg har et script som jeg bruker til å sjekke om cookien eksisterer. Hvordan skal jeg få sjekke med sessions om jeg er innlogget? Lenke til kommentar
Torbjørn Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 du kan sette $session->param('logged_in', 1); # når han logger inn så kan du siden på en annen beskyttet side sjekke: if( $session->param('logged_in') ){ ## vise topp hemmelig materiale } else{ ## hetse besøker } Lenke til kommentar
kjetil_b Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 Er nesten i mål. Får logget inn, og opprettet session, men blir logget ut rett etterpå. Virker som om jeg overskriver sessionen når jeg skal sjekke. Skal jeg poste kode, eller skjønner du hva jeg snakker om? Lenke til kommentar
Torbjørn Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 paste litt kode, men indenter den du husker å print $session->header og ikke $cgi->header som ellers? Lenke til kommentar
kjetil_b Skrevet 15. mai 2006 Forfatter Del Skrevet 15. mai 2006 Dette ble fryktelig rot, og alt har gått litt på trynet, men skal poste litt kode her. Hele scriptet består av mange filer. Dette er fila som mottar logginn-informasjonen: require "subroutines.pl"; use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI; use CGI::Session; use DBI; my $cgi = new CGI; my $session = new CGI::Session ( $cgi ); my $brukernavn = $cgi->param('brukernavn'); my $passord = $cgi->param('passord'); my $db_passord = crypt($passord, "La"); &database; $sth = $dbh->prepare("SELECT COUNT(*) FROM setra WHERE brukernavn='$brukernavn' and passord = '$db_passord'"); $sth->execute(); $exist = $sth->fetchrow(); if($exist ne 1){ &ingen_treff; exit; } $session->param('logget_inn',1); print $session->header; ...(resten er bare printing av sida) Dette er fila som sjekker om du er innlogget. use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI::Session; my $session = new CGI::Session ( $cgi ); use CGI; my $cgi = new CGI; use DBI; &database; if(!$session->param('logged_in') ){ } else{ $innlogget = 1; } print $session->header; 1; Hetsinga gjøres ikke via denne fila. Lenke til kommentar
Torbjørn Skrevet 15. mai 2006 Del Skrevet 15. mai 2006 (endret) hm... setter du use strict; øverst i dine filer, ville du fått svaret... rekkefølgen på dine kodelinjer er ikke helt logisk, se på $cgi objektet f.eks EDIT: en digresjon: ikke bruk &database; men istedet datebase(); det finns sjelden noen grunn til å ta med & i funksjonskall. Endret 15. mai 2006 av Torbjørn Lenke til kommentar
Manfred Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 For å fortsette digresjonen: Hva er den store forskjellen i å bruke &funksjon og funksjon() ? Eller er dette bare en til av Perls store utvalg i hvordan man selv vil bestemme å skrive kode? Lenke til kommentar
kjetil_b Skrevet 16. mai 2006 Forfatter Del Skrevet 16. mai 2006 Skal prøve med use strict. Får også prøve å stokke om litt på linjene. Og &database kaller opp en sub med navn database, som kobler meg opp til databasen Derfor ikke database() Lenke til kommentar
Torbjørn Skrevet 16. mai 2006 Del Skrevet 16. mai 2006 kjetil_b: som Manfred er inne på så er det & foran database som er issuet her. Har du prøvd med database()? det vil mest sannsynlig ikke ha noen endring i ren funksjonalitet slik du har implementert det. Forskjellen står beskrevet i perldoc perlsub: To call subroutines: NAME(LIST); # & is optional with parentheses. NAME LIST; # Parentheses optional if predeclared/imported. &NAME(LIST); # Circumvent prototypes. &NAME; # Makes current @_ visible to called subroutine. den siste er aktuell for deg - den medfører at du blander @_ inn i name space til din funksjon, hvilket du mest sannsynlig ikke trenger? Lenke til kommentar
kjetil_b Skrevet 18. mai 2006 Forfatter Del Skrevet 18. mai 2006 Fikk denne med use strict; Compilation failed in require at index.cgi line 13. På linje 13: if(!$session->param('logged_in') ){ Virker ikke som om logged_inn har blitt lagret. Lenke til kommentar
Torbjørn Skrevet 18. mai 2006 Del Skrevet 18. mai 2006 kan du paste koden på nytt, dette så rart ut. Lenke til kommentar
kjetil_b Skrevet 18. mai 2006 Forfatter Del Skrevet 18. mai 2006 Her er altså fila som sjekker om du er pålogget eller ikke: use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI::Session; my $session = new CGI::Session ( $cgi ); use CGI; my $cgi = new CGI; use DBI; use strict; my($dbh); $dbh = DBI->connect( "dbi:mysql:database", "username", "password", { RaiseError => 1, AutoCommit => 1}) or feilmelding("Kan ikke koble til:",$dbh->errstr); if(!$session->param('logged_in') ){ } else{ my $innlogget = 1; } print $session->header; 1; Fjerna informasjonen i database innlogginga. Og jeg bare bytta ut &database; med hele tilkoblinga midlertidig. Lenke til kommentar
Torbjørn Skrevet 18. mai 2006 Del Skrevet 18. mai 2006 var det ikke en require du hadde problem med? Lenke til kommentar
kjetil_b Skrevet 18. mai 2006 Forfatter Del Skrevet 18. mai 2006 Tror kanskje jeg fikk løst det med my($dbh); Og når jeg ser over det nå, så har jeg rota litt...jaja. Uansett, så blir jeg ikke logget inn. Hvordan kan jeg sjekke at jeg er innlogget med sessions? Det som jeg har prøvd til nå funker tydeligvis ikke. Lenke til kommentar
Torbjørn Skrevet 18. mai 2006 Del Skrevet 18. mai 2006 um.. kan du nå etter å ha rettet opp koden legge den ut på ny? tidligere så det ut som om du har byttet på å bruke logget_in og logget_inn, dvs med 1 eller 2 n'er, kan det være det? Lenke til kommentar
kjetil_b Skrevet 18. mai 2006 Forfatter Del Skrevet 18. mai 2006 Stemte nok det ja. Var en skrivefeil som utgjorde det. Pinlig! Etter litt strev så funker alt som det skal. Takk for hjelpa! Setter virkelig pris på å kunne få hjelp så raskt. Kommer til å fortsette å spørre hvis det er noe jeg lurer på. Har ikke så mye å bidra med til perl forumet bortsett fra spørsmål, men det er kanskje bra at noen skriver her i hele tatt 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å