26. november 2005 - 22:54
Der er
21 kommentarer og 1 løsning
Sikkerhedsbrist i login!
hejsa jeg har et login system, og jeg vil gerne lave en del af siden som kun er tilladt adgang hvis man er admin.. men det her giver alle brugere adgang! if($_SESSION["user"] == true && $_SESSION["user"] == 'Webmaster') og der her virker ikke if($_SESSION["user"] == true && $_SESSION["$user"] == 'Webmaster') problemet er af sessionen hedder user og feltet i databasen til brugernavn hedder også user.. hvordan får jeg det til at passe.. jeg har også et felt i tabellen der hedder rang, hvis man kunne gøre at alle dem med rang = admin eller coadmin fik adgang.. ellers ikke??
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
26. november 2005 - 22:59
#1
Det bør være tilstrækkeligt med if($_SESSION["user"] == 'Webmaster') { // kun for webmaster }
26. november 2005 - 23:01
#2
den giver også adgang til min test bruger som er brugernavn: member kodeord: member rang: member så den går ikke..
26. november 2005 - 23:12
#3
Jo, den går. Hvis der er noget galt, så er det et andet sted.
26. november 2005 - 23:15
#4
<?php session_start(); if($_SESSION["user"] == 'Webmaster') { include "inc/config.php"; include "inc/header.php"; ?> <td width="496" valign="top" bgcolor="#728CAD"> <b>Admin Panel:</b><hr> <? if(isset($_POST['slet'])){ $id = $_POST['id']; mysql_query("DELETE FROM min_gb WHERE id = '$id'"); echo "Besked slettet"; } else { if($_POST['action'] == "ret") { $besked = $_POST['besked']; $id = $_POST['id']; $navn = $_POST['navn']; $email = $_POST['email']; $hjemmeside = $_POST['hjemmeside']; mysql_query("UPDATE min_gb set besked = '$besked', email = '$email', hjemmeside = '$hjemmeside', navn = '$navn' WHERE id = '$id'"); echo "Besked rettet"; } else { $hent = mysql_query("SELECT * FROM min_gb order by id desc"); while ($row = mysql_fetch_array($hent)) { ?> <form method="post" action="<? echo $PHP_SELF; ?>"> <input name="navn" type="text" value="<? echo ''.$row['navn'].''; ?>"> <br> <input name="email" type="text" value="<? echo ''.$row['email'].''; ?>"> <br> <input name="hjemmeside" type="text" value="<? echo ''.$row['hjemmeside'].''; ?>"> <br> <textarea cols="40" rows="5" name="besked"> <? echo ''.$row['besked'].''; ?></textarea> <input name="id" type="hidden" value="<? echo ''.$row['id'].''; ?>"> <input type="hidden" name="action" value="ret"><br> <input name="submit" type="submit" value="Ret Besked"> <input type="submit" name="slet" value="Slet Besked"> </form> <hr> <?php } } } include "inc/bottom.php"; } else { ?> <td width="496" valign="top" bgcolor="#728CAD"> <b>Fejl:</b><hr> <font color="red"> Forkert Brugernavn eller kodeord! <? include "inc/bottom.php"; } ?> På den måde du siger så giver det ALLE adgang.. Har selv testet det..
26. november 2005 - 23:16
#5
Men kan det gøres så alle dem med rang == webmaster får adgang.. i stedet for brugernavnet?
26. november 2005 - 23:20
#6
Nej, den giver ikke alle adgang. Kun dem hvor $_SESSION["user"] er lig med 'Webmaster'. Det kan så være den er det for alle...
26. november 2005 - 23:21
#7
Du kan jo skrive den ud lige før if-sætningen.
26. november 2005 - 23:25
#8
hvad er det der bestemmer om $_SESSION["user"] er lig med 'Webmaster' ???
26. november 2005 - 23:25
#9
Det er dig, der bestemmer ;))
26. november 2005 - 23:27
#10
det forstår jeg ikke.. hehe hvordan finder man ud af om rangen for den bruger der er logget ind er lige med webmaster og så man kun kan se siden hvis man er logget ind som ham??
26. november 2005 - 23:32
#11
Inden du gør det, så skal du have løst problemet som det står nu. Der er jo noget galt. Det er i din kode - et sted. Gider du fortælle om den udskriver at $_SESSION["user"] er lig med 'Webmaster' selv om du mener du er logget ind som noget andet? Hvis det er tilfældet, så skal du vel kigge på de steder hvor $_SESSION["user"] får en værdi.
26. november 2005 - 23:37
#12
her bliver sessionen defineret: <?php session_start(); include("inc/config.php"); $user = mysql_real_escape_string($_POST['user']); $user = ucwords($user); $pass = mysql_real_escape_string($_POST['pass']); $pass = strtolower($pass); $query = mysql_query("select * from users where user = '".$user."' AND pass = '".$pass."' LIMIT 1"); if(mysql_num_rows($query)>0) { $_SESSION['user'] = true; header("location: user_profil.php"); } else { echo "<font color=\"red\">Forkert Brugernavn eller Kodeord</font>"; } ?>
26. november 2005 - 23:38
#13
mener det var dig eller jakobdo der hjalp mig med at lave den.. hehe
26. november 2005 - 23:42
#14
Jeg tvivler på det var mig. Men se nu sætter du jo ikke $_SESSION["user"] til andet end true. Hvordan kan du så tro den kan blive til 'Webmaster' ? $_SESSION['user'] = $user; var nok mere relevant. Og ja, er den sat til: true, så kommer du ind i if-sætningen som du viste først.
26. november 2005 - 23:46
#15
okay det virker nu :-D Jeg prøver at få den til at gøre det efter rang.. ellers kan det være jeg vender tilbage.. men smid et svar så smider jeg point efter dig :-D Mange tak for hjælpen!
26. november 2005 - 23:47
#16
Jeg samler slet ikke på point. Skal du gøre det efter rang, så hent rangen fra databasen i den select du viser her til sidst, og gem den i en ny session-variabel.
26. november 2005 - 23:58
#17
$query = mysql_query("select user, pass, rang from users where user = '".$user."' AND pass = '".$pass."' LIMIT 1"); $_SESSION['user'] == $rang if($_SESSION['user'] == 'Admin'){ // logget ind som admin } else { if($_SESSION['user'] == true){ // logget ind om bruger } else { // ikke logget ind }} Kan det gøres sådan???
27. november 2005 - 00:02
#18
Nej, ikke som du skriver det. Du skal nok stadig have: if(mysql_num_rows($query)>0) Du skal læse rang fra databasen. Du skal ikke blande "true" ind i det. Du skal da give den session-variabel et navn, der siger at den har noget med rang at gøre.
27. november 2005 - 00:07
#19
Puha, det lyder besværligt.. Men jeg går igang, hvis jeg får problemer kan det være at jeg vender tilbage :-D
05. januar 2006 - 18:36
#20
Det er blevet ordnet.. Læg et svar hvis du vil have point :-)
05. januar 2006 - 21:03
#21
Nej tak.
07. januar 2006 - 17:26
#22
Så tager jeg dem selv :)
Vi tilbyder markedets bedste kurser inden for webudvikling