Avatar billede webstuff Nybegynder
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??
Avatar billede erikjacobsen Ekspert
26. november 2005 - 22:59 #1
Det bør være tilstrækkeligt med

if($_SESSION["user"] == 'Webmaster') {
  // kun for webmaster
}
Avatar billede webstuff Nybegynder
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..
Avatar billede erikjacobsen Ekspert
26. november 2005 - 23:12 #3
Jo, den går. Hvis der er noget galt, så er det et andet sted.
Avatar billede webstuff Nybegynder
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..
Avatar billede webstuff Nybegynder
26. november 2005 - 23:16 #5
Men kan det gøres så alle dem med rang == webmaster får adgang.. i stedet for brugernavnet?
Avatar billede erikjacobsen Ekspert
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...
Avatar billede erikjacobsen Ekspert
26. november 2005 - 23:21 #7
Du kan jo skrive den ud lige før if-sætningen.
Avatar billede webstuff Nybegynder
26. november 2005 - 23:25 #8
hvad er det der bestemmer om $_SESSION["user"] er lig med 'Webmaster' ???
Avatar billede erikjacobsen Ekspert
26. november 2005 - 23:25 #9
Det er dig, der bestemmer ;))
Avatar billede webstuff Nybegynder
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??
Avatar billede erikjacobsen Ekspert
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.
Avatar billede webstuff Nybegynder
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>";
}
?>
Avatar billede webstuff Nybegynder
26. november 2005 - 23:38 #13
mener det var dig eller jakobdo der hjalp mig med at lave den.. hehe
Avatar billede erikjacobsen Ekspert
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.
Avatar billede webstuff Nybegynder
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!
Avatar billede erikjacobsen Ekspert
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.
Avatar billede webstuff Nybegynder
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???
Avatar billede erikjacobsen Ekspert
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.
Avatar billede webstuff Nybegynder
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
Avatar billede webstuff Nybegynder
05. januar 2006 - 18:36 #20
Det er blevet ordnet..
Læg et svar hvis du vil have point :-)
Avatar billede erikjacobsen Ekspert
05. januar 2006 - 21:03 #21
Nej tak.
Avatar billede webstuff Nybegynder
07. januar 2006 - 17:26 #22
Så tager jeg dem selv :)
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