Avatar billede johan.o Nybegynder
30. november 2005 - 02:18 Der er 12 kommentarer og
1 løsning

Brug af getenv('REMOTE_ADDR') i forbindelse med login script

Jeg har tænkt på om ikke man kunne lade getenv('REMOTE_ADDR') indgå som en del af et script der checker om en bruger er logget ind.

Min første tanke var :

if(md5($_COOKIE['key']+getenv('REMOTE_ADDR'))==$row['key'])

Hvor $_COOKIE indeholder en random værdi som er sat i forbindelse med brugerens første login og samtidig er md5() værdien af denne randomværdi+'remote_addr' gemt i en database tabel der indeholder alle der er online for øjeblikket.

Men er der noget der taler imod at jeg blot gemmer 'remote_addr' i database tabellen og så laver :

if(getenv('REMOTE_ADDR')==$row['key'])

hvor 'key' så blot er den 'remote_addr' brugeren 'brugte' da han/hun loggede ind.

Det virker jo, men jeg er interesseret i at høre om evt. ulemper, security risks og lign.

Og bare for at der ikke opstår misforståelser så er det først EFTER at en bruger har logget sig på med korrekt pwd og brugernavn at dette evt. skulle 'køres'.

Mvh. Johan
Avatar billede showsource Seniormester
30. november 2005 - 02:23 #1
Præcis hvad er det du vil?
Sikre at det er den korrekte bruger som ser siden?
Avatar billede nielle Nybegynder
30. november 2005 - 08:23 #2
Der er ikke nogen garenti for at brugeren har samme IP-nummer næste gang at han/hun ønsker at logge på din side.
Avatar billede johan.o Nybegynder
30. november 2005 - 10:24 #3
For s.... hvor er jeg træt af at man hele tiden bliver 'smidt' af exp.dk mens man sidder og skriver indlæg og når man så skal logge på igen så ryger hele indlægget sig en tur og man kan starte forfra :)

Nåh, men tilbage til tråden, jeg skal vist forklarer mig lidt bedre så jeg prøver at vise noget pseudo-kode (ikke copy-paste) :

login.htm :

<form action="log.php">
<input user>
<input pwd>
</form>

log.php :

<?php
$q=mysql_query("SELECT * FROM users WHERE user='".$_POST['user']."' AND pwd='".$_POST['pwd']."'");
if(mysql_num_rows($q)==1) {
mysql_query("INSERT INTO online VALUES ('".getenv('REMOTE_ADDR')."')");
header("location: hem.php");
die; }
else {
header("location: login.htm");
die; }
?>

hem.php :

<?php
$q=mysql_query("SELECT * FROM online WHERE ip='".getenv('REMOTE_ADDR')."'");
if(mysql_num_rows($q)!=1) {
header("location: login.htm");
die; }

......en masse 'hemmeligt' indhold.....

?>
Avatar billede johan.o Nybegynder
30. november 2005 - 10:35 #4
Jeg ved at der er en masse 'huller' i ovenstående men nu handler det kun om brugen af 'remote_addr'.

Database tabellen 'online' indeholder udover ip adresser fra alle de brugerer der har logget sig på, også et 'timestamp' og ip-adressens 'brugernavn'.

'Timestamp' opdateres hver gang brugeren besøger en 'hemmelig' side, og samtidig checkes alle andre brugeres 'timestamp' og hvis de er ældre end f.eks. 10 minutter slettes de fra tabellen.

Så kan jeg, hver gang en bruger kigger på en 'hemmelig' side, tilgå 'online' tabellen og vise hvor mange der er online og tilmed hvem der er online.

Næste gang brugeren logger på kan det sagtens være med en anden 'remote_addr' men det er jo ligemeget da det altid er den aktuelle der gemmes efter login.

Mvh. Johan
Avatar billede johan.o Nybegynder
30. november 2005 - 10:37 #5
Så er mit spørgsmål om der er 'ting' omkring getenv('REMOTE_ADDR') der gør denne løsning uhensigtsmæssig ?

Er der security-issues jeg bør være opmærksom på ?

Mvh. Johan
Avatar billede nielle Nybegynder
30. november 2005 - 11:30 #6
Som sagt er der ikke nogen garanti for at folk har samme IP-adresse næste gang at de ønsker at logge på din side. Der er stadigt brugere som har dynamisk IP-adresse.

Desuden kan de tænkes at ønske at kunne logge på fra forskellige lokationer - derhjemme, på arbejdet, eller fra en tilfældig webcafe mens at de er på ferie. Alt dette gør tilsammen at det som regel er en dårlig ide at blande IP-nummer ind i et login-schema.
Avatar billede johan.o Nybegynder
30. november 2005 - 12:24 #7
nielle>> den aktuelle ip adresse gemmes jo først når login er foretaget. I morgen kan du logge på i Athen hvis du vil, den gemmer først ip adressen efter at du har bevist hvem du er. Så det er ikke noget problem.

Mvh. Johan
Avatar billede nielle Nybegynder
30. november 2005 - 12:35 #8
Hvis det ikke var tiltænkt at bruge til auto-login, så forstår jeg ikke hvorfor at du bruger cookies? I stedet burde du bruge sessions.
Avatar billede johan.o Nybegynder
30. november 2005 - 12:51 #9
nielle>> Det er ikke meningen at det skal bruges til autologin. Og med hensyn til cookies så er det jo præcis det jeg prøver at undgå og det samme med sessions. Ide'en er at der sendes kun login informationer 1 gang til serveren, og det er POST-data fra login.htm. Derefter vil der ikke være nogen cookies ellers sessions alt vil blve kontrolleret via ip adressen.

Derudover er forskellen på cookies og sessions vel ikke så stor igen, bliver session data ikke overført med cookies ?

Mvh. Johan
Avatar billede Slettet bruger
30. november 2005 - 16:54 #10
Nej, ikke session-data. Kun en session-nøgle, som overføres som en enkelt cookie (eller ligger i URL). Selve data ligger på serveren.
Avatar billede nielle Nybegynder
30. november 2005 - 17:42 #11
Med mindre at du ønsker at kunne holde styr på hvor mange prugere der pt. er online på din side, kan du klare det udelukkende med sessions. Sessions og cookies fungere efter nogenlunde samme principper, og den største forskel er at cookien bliver liggende efter at brugeren logger af.

Men, for nu at svare på dit oprindelige spørgsmål; Nej det er ikke 100% sikkert at bruge IP-nummeret på denne måde:

if(getenv('REMOTE_ADDR')==$row['key'])

Dette skyldes at to brugere, som begge sidder bag en NAT-router, vil se ud som om at de har samme IP-nummer.
Avatar billede johan.o Nybegynder
02. december 2005 - 12:20 #12
nielle>> Ja, det var lige præcis det jeg 'frygtede' :) - smid et svar.

Mvh. Johan
Avatar billede nielle Nybegynder
02. december 2005 - 18:26 #13
Svar :^)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester