Avatar billede php_programmoer Nybegynder
20. november 2005 - 13:31 Der er 19 kommentarer og
1 løsning

Tjek om det er admin som logger ind via status i DB

Jeg har indtil videre lave et meget simpelt og usikkert script som tjekker om det er admin som logger ind eller om det er en almindelig bruger. Men nu har jeg så fundet ud af at man kan snyde sig ind i administrator panelet ved at logge ind som almindelig bruger også bare skriver adressen til admin panelet og derved har man adgang til det, det vil jeg gerne ændre ved at indsætte en status i min database, ved ikke helt hvordan det fungere derfor vil jeg gerne have hjælp til at få det til at fungere, er ikke påbegyndt endnu for jeg vil nemlig gerne have et trin for trin herinde :)

I kan evt. se et link til en af mine forrige indlæg hvor jeg fik anbefalet denne metode: http://www.eksperten.dk/spm/663141
Avatar billede Slettet bruger
20. november 2005 - 13:58 #1
jeg bruger selv den måde

if ($s_username && $s_password && $s_sikkerhed == admin) {
Avatar billede php_programmoer Nybegynder
20. november 2005 - 14:01 #2
$s_username står for brugernavn
$s_password står for kodeord
men hvad står dette for $s_sikkerhed ?
Avatar billede Slettet bruger
20. november 2005 - 14:12 #3
det er fx. lige som level. hvis du har siger vi 3 felter i dit tabel. users

username
password
level

og en bruger hedder

username: test
password: 12345
level: admin

if ($s_username && $s_password && $s_level == admin) {

så er det bare sådan der.

det gør sådan at det er kun folk med "admin" i feltet level der kan se det / rette i det
Avatar billede php_programmoer Nybegynder
20. november 2005 - 14:20 #4
Jamen nu er det sådan at jeg ikke har flere levels, jeg vil KUN have level'et admin.

Kan du så ikke lige skrive hvilket felt jeg skal oprette i mysql og hvor ?
og hvilken kode jeg så skal tjekke om man har admin status med php ?
Avatar billede showsource Seniormester
20. november 2005 - 14:31 #5
Hvis du bruger sessions ved login, kan du jo sætte en session hvis det er admin som logger ind, og så tjekke om den session er sat på din adminfil
Avatar billede showsource Seniormester
20. november 2005 - 14:34 #6
a'la'

$_SESSION["bruger"] = $row["brugernavn"];

    if($row["brugernavn"] == "admin")
    $_SESSION["admin"] = 1;
    }

På din admin fil starter du så med

if(!isset($_SESSION["admin"])) {
echo"Fejl i request";
exit;
}

resten af adminscript...............
Avatar billede php_programmoer Nybegynder
20. november 2005 - 14:38 #7
hvor skal:
-------------------------------------------------------
$_SESSION["bruger"] = $row["brugernavn"];

    if($row["brugernavn"] == "admin")
    $_SESSION["admin"] = 1;
    }
-------------------------------------------------------
indsættes ?
Avatar billede showsource Seniormester
20. november 2005 - 14:54 #8
I dit login.
Ved jo ik' lige hvordan du logger ind :O)
Avatar billede php_programmoer Nybegynder
20. november 2005 - 15:03 #9
Det virker ikke, eller skal jeg også oprette et felt i databasen for at det virker ?
Avatar billede php_programmoer Nybegynder
20. november 2005 - 15:04 #10
den siger "Fejl i request" lige meget hvad
Avatar billede showsource Seniormester
20. november 2005 - 15:12 #11
Du glemmer session_start()

Eller du bruger slet ikke sessions?
Avatar billede php_programmoer Nybegynder
20. november 2005 - 15:15 #12
Jo jo, bruger sessions og har husket session_start();

her er toppen af mit administrator panel:
----------------------------------------------------------------
<?
session_start();
?>

<h2>Administrator panel</h2>

<?php
include "mysql.php";

if(!isset($_SESSION["admin"])) {
echo "Du har ikke administrator rettighed";
exit;
}
//Tjekker om man er logget ind
if(!empty($_SESSION['brugernavn']))
{
//Laver en query der finder ens brugerid i databasen
$query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_SESSION['brugernavn'] ."'") or die(mysql_error());
$row = mysql_fetch_assoc($query);

//Man er logget ind, og kan derfor se det hemlige indhold
Avatar billede showsource Seniormester
20. november 2005 - 15:21 #13
og koden du logger ind med?
Avatar billede php_programmoer Nybegynder
20. november 2005 - 15:27 #14
jamen den er jo i databasen.. (det er et system for flere bruger - ikke kun en)

men hvis du nu absolut vil have min kode af vide er det således :D

brugernavn: admin
kodeord: test
Avatar billede showsource Seniormester
20. november 2005 - 15:33 #15
?
Du har vel en loginform?
Og når den postes, har du noget phpkode som tjekker brugernavn og password?

Det er den phpkode jeg gerne vil se! :O)
Avatar billede php_programmoer Nybegynder
20. november 2005 - 15:38 #16
Nårh, du mener check.php

den er her:

--------------------------------start--------------------------------
<?php
//Helt i starten starter vi sessioner, og forbinder til vores database
session_start();
include "mysql.php";

$_SESSION["bruger"] = $row["brugernavn"];

    if($row["brugernavn"] == "admin") {
    $_SESSION["admin"] = 1;
    }
//Tjekker om både brugernavn og kodeord er indtastet.
if(empty($_POST['brugernavn']) || empty($_POST['kodeord']))
{
//Sender brugeren tilbage til login.php ved brug af en header
header("location: login.php");
exit;
}
//Hvis både brugernavn og kodeord er sat, går vi videre.
else
{
$query = mysql_query("SELECT * FROM brugere WHERE brugernavn='". $_POST['brugernavn'] ."'") or die(mysql_error());
//Tjekker om der er én række i databasen der har det indtasetde brugernavn
//Dette gør dog, at flere brugere ikke må have samme brugernavn!
if(mysql_num_rows($query) == '1')
{
//Laver databasekaldet om til et array
$row = mysql_fetch_array($query);
//Tjekker om kodeordet i databasen er lig med det indtastede kodeord
if($row['kodeord'] == $_POST['kodeord'])
{
//Brugeren har indtastet rigtige oplysninger, nu skal han gemmes i sessioner
$_SESSION['brugernavn'] = $_POST['brugernavn'];
//Derudover skal han sendes til en hemlig side, hvorpå der bliver tjekket om han er logget ind
header("location: logget_ind.php");
} else {
//Brugernavnet fandtes ikke i databasen, derfor skal der udskrives en fejl.
header("location: login.php");
exit;
}
}
else
{
//Brugeren har skrevet et forkert brugernavn
//Sender brugeren tilbage til login.php ved brug af en header
header("location: login.php");
exit;
}
}
?>
--------------------------------slut---------------------------------
Avatar billede showsource Seniormester
20. november 2005 - 15:57 #17
Du skal jo nok flytte

$_SESSION["bruger"] = $row["brugernavn"];

    if($row["brugernavn"] == "admin") {
    $_SESSION["admin"] = 1;
    }

da du jo endnu ikke har hentet noget fra DB!

Men en lettere omkodet version: (utestet)

<?php
session_start();

//Tjekker brugernavn og kodeord er postet
if(isset($_POST["brugernavn"], $_POST["kodeord"]))
{

include("mysql.php");
$query = mysql_query("SELECT `brugernavn` FROM `brugere` WHERE `brugernavn` = '". $_POST["brugernavn"] ."' AND `kodeord` = '". $_POST["kodeord"] ."'") or die(mysql_error());

    if(mysql_num_rows($query) == 1)
    {

    $row = mysql_fetch_array($query);


    $_SESSION["brugernavn"] = $row["brugernavn"];

        if($row["brugernavn"] == "admin")
        {
        $_SESSION["admin"] = 1;
        }

    header("location: logget_ind.php");
    exit;

    }

}

// sender til login.php uanset hvad
header("location: login.php");
exit;

// derudover bør du bruge noget tjek på at der ikke bliver manipuleret med $query

?>
Avatar billede showsource Seniormester
20. november 2005 - 15:58 #18
// sender til login.php uanset hvad hvis man ikke allerede er sendt til logget_ind.php
Avatar billede php_programmoer Nybegynder
20. november 2005 - 16:50 #19
Jeg fik det til at virke, læg et svar :)
Avatar billede showsource Seniormester
21. november 2005 - 13:48 #20
ok
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