Gå til innhold

Bruke session fra IPB til eget bruk. Trygt?


Anbefalte innlegg

Holder på å lage en side nå, og bruker Invision PowerBoard. Når en bruker er logget inn på forumet, kan jeg da gå inn med en spørring mot forum-db'en, sjekke brukers IP mot IPen i db, sette mine egne sessions, og regne det som trygt?

 

Alternativet er å ha helt egen login for siden min, og en annen login for forumet, som ikke er helt ideelt.

Fant en mod som het IPBSDK, fikk til å logge meg inn på forumet med den via siden min, men var egentlig ikke det jeg var ute etter, og jeg fikk ikke helt til å integrere det i siden min på en fornuftig måte uansett.

 

Vil eksempelet over være trygt? Håper noen forstod hva jeg mente...

Lenke til kommentar
Videoannonse
Annonse

Har nå gått gjennom usannsynlig mye kode, men siden jeg ikke er helt vant med så store systemer, er det vanskelig å få god oversikt. Fra det jeg husker nå (sett gjennom hele functions og login fila...), så bruker ikke IPB session på "vanlig" måte. IPB har en session tabell i databasen som blir oppdatert med jevne (hvert 5. minutt tror jeg det var) mellomrom. I den tabellen ligger det: id (session_id antar jeg), member_name, member_id, ip_address, browser, running_time, login_type, location, member_group, in_forum, in_topic.

 

Om jeg kjører spørring på siden min for hver gang brukeren går inn på en side med begrenset adgang mot denne session tabellen i IPB databasen, sjekker fx IP til bruker mot IPene i session tabellen. Finner den en IP som stemmer overens med brukerens og denne IPen er logget inn (fx member_group=3), vil det ikke være sikkert? Kan evt også ta en sjekk mot browser, men da må jeg se på koden igjen så jeg er sikker på det stemmer overens.

 

Om dette ikke er bra nok, hvordan får jeg da tak i infoen $INFO['whatever']['???'] fra IPB utenom den tabellen?

Det stod jo til og med kommentert en plass i kildekoden at om IP og browser stemte overens regnet man det som sikkert (eller noe lignende ordlyd), så det burde holde skulle jeg tro, med mindre jeg har oversett soleklare fallgruver da...

 

Skal egentlig ikke føye til noe, den dataen som ligger i IPB session er bra nok, men jeg vil gjerne bruke fx member_group for å gi rett tillatelse på siden min.

 

Noen kommentarer?

Endret av Pangaea
Lenke til kommentar

Sorry for å må ha inn med teskjei, men hvor må jeg skrive det for å få ut noe informasjon?

 

Prøvde å lage en testfil med db connection, men kom ingenting fram. Prøvde å sette inn i index-fila, men der skjedde det heller ingenting... :blush:

Lenke til kommentar

Ah, endelig fikk jeg det fram :w00t:

 

I toppen gikk det ikke, i bunnen kom absolutt ingenting fram (ikke engang echo "INFO";), så prøvde jeg ca i midten, og da kom det et lass med arrays.

 

Takker, håper jeg klarer å få noe fornuftig ut av det nå da...

Lenke til kommentar

Interessant å se i $ibforums-arrayen, men om jeg har hengt med har jeg egentlig det jeg trenger i session tabellen til ipb. Selve session_id tror jeg ikke jeg kan bruke, siden jeg ikke har noen måte å få vite brukerens session_id på bortsett fra å sjekke i den tabellen mot ip og browser. Kan selfølgelig hente ut id'en og sjekke mot tabellen senere, men tror ipb kan skifte ut sessions og da får jeg ny id igjen, så kanskje like greit å bare bruke ip og browser..?

 

På siden min kan jeg da hente ut member_id, member_name, ip_address, user_agent, member_group. Om ip og agent stemmer overens, anser jeg brukeren som logget inn på siden min også, og lager min egen session med den infoen. Dette kan jeg sjekke enten for hver gang bruker klikker på en link hvor han må være medlem for å kunne få adgang til; eller fx hvert 5. minutt. Tror ipb oppdaterer session tabellen hvert 5. minutt så det er kanskje det greieste, da sparer man litt queries også.

 

Høres dette ut som en grei plan folkens?

 

Edit: IPB bruker disse funksjonene...

$user_agent = substr($HTTP_SERVER_VARS['HTTP_USER_AGENT'],0,50);
$ip_address = $_SERVER['REMOTE_ADDR'];

Endret av Pangaea
Lenke til kommentar

Ser ut som det fungerer :)

 

function sess_check($browser)
{
   include("./include/ipb_db.inc.php");
   
   $ip_address = $_SERVER['REMOTE_ADDR'];

   $query = "SELECT * FROM ippbe_sessions WHERE member_name<>'' AND member_id>0 AND ip_address='$ip_address' AND browser='$browser' AND member_group IN (3,4,6)";
   $result = mysql_query($query) or die ("Could not execute query.".mysql_error());

   $rows = mysql_num_rows(mysql_query($query));
   
   return $rows;
}
   $browser = substr($HTTP_SERVER_VARS['HTTP_USER_AGENT'],0,50);
   echo "Rows: ".sess_check($browser);

 

Måtte sende med $browser siden jeg fikk '' om jeg hadde det i funksjonen... Men bortsett fra det fungerer det glimrende så langt :yes:

Endret av Pangaea
Lenke til kommentar

Sorry for å poste så mye her, men lurer på noe mer.

Er det ikke mulig å få fram browser i en funksjonsfil ("function.inc.php" i mitt tilfelle) ?

Ser det kan bli ganske tungvint å måtte skrive det foran hver gang jeg skal bruke den funksjonen, ville vært mye bedre om man fikk fram browser også i funksjonen.

Lenke til kommentar

Kanskje et dumt spørsmål igjen, men here it goes

Om man ikke logger seg ut fra forumet, er det noen mulighet for at ipb da forandrer session id? Vil man ha samme session id så lenge man er innlogget?

 

Om det stemmer kan jeg slippe å legge infoen jeg trenger fra ipb session tabellen inn i min session hver gang jeg kjører innloggings-sjekken. Om $_SESSION['id'] og $record['id'] stemmer overens kan jeg bruke det jeg har i sessionen min istedet for å oppdatere hele tiden. Sparer vel ikke så mye tid, men sikkert litt. Hvis det er trygt da seff, men skulle da tro det.

 

Edit: Kode...

function loggedin()
{
   include("ipb_db.inc.php");
   $ip_address = $_SERVER['REMOTE_ADDR'];
   $browser = substr($_SERVER['HTTP_USER_AGENT'],0,50);

   $query = "SELECT * FROM ippbe_sessions WHERE member_name<>'' AND member_id>0 AND ip_address='$ip_address' AND browser='$browser' AND member_group IN (3,4,6)";
   $result = mysql_query($query) or die ("Could not execute query.".mysql_error());
   $rows = mysql_num_rows(mysql_query($query));
   $record = mysql_fetch_assoc($result);
   
   if($rows==1)
   {
       if(!$_SESSION['id'] == $record['id'])
       {
           $_SESSION['id'] = $record['id'];
           $_SESSION['member_name'] = $record['member_name'];
           $_SESSION['member_id'] = $record['member_id'];
           $_SESSION['member_group'] = $record['member_group'];
       }
       return true;
   }
   else
   {
       session_unset();
       session_destroy();
       setcookie(session_name() ,"",0,"/");
       return false;
   }
}

Jøss, ibf sessions blir forandret til ippbe_sessions...

Endret av Pangaea
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...