Avatar billede saybot Nybegynder
15. april 2005 - 18:04 Der er 14 kommentarer

login script problemer

Jeg har et login script... det virker sådan at hvis man inkluderer require_userlevel(0); så bestemmer denne udfra en mysql database om man må indholdet eller ikke...

men det virker ikke.

eks.
require_userlevel(1); - har ser admin indholdet
require_userlevel(0); - her er ikke adgang for almindelige.

Her er koden som sørger for require_userlevel();
_____________________________________________________________

function get_level(){
// returns the user's userlevel
$username = $_COOKIE['loggedin'];
global $tablename; // the tablename set in login.php
global $goduser;
if ($username == $goduser)
    return 9999; // it's god, he has a really high userlevel.


$query = "select userlevel from $tablename WHERE username = $username";
if ($result = mysql_query($query)) {
$row = mysql_fetch_array($result);
    $level = $row['userlevel'];
}
else
    $level = 0;
return $level;
}

//////////////////////////////////////////////////////////////

function require_userlevel($level) {
    // dies if user doesn't have access rights.
$ul = get_level(); // get their user level
if ($ul >= $level) {
    // access granted
    return;
}
else {
//    echo"<script language=javascript>alert('Sorry, you do not have access to this');</script>";
//  include("login.html");
    die;

}
}// require_userlevel
Avatar billede bjavle Nybegynder
15. april 2005 - 18:12 #1
Skal det ikke være:
if ($username == $goduser){
return 9999; // it's god, he has a really high userlevel.
}
else{
$query = "select userlevel from $tablename WHERE username = $username";
if ($result = mysql_query($query)) {
$row = mysql_fetch_array($result);
    $level = $row['userlevel'];
}
else
    $level = 0;
return $level;
}
}
Avatar billede dennismp Nybegynder
15. april 2005 - 18:12 #2
Hvordan "virker ikke"?

Du er godt klar over, at det er relativt nemt at ændre i cookie indhold. Ifølge din kode skal jeg bare gætte administrator-navnet så har jeg adgang til alt.
Avatar billede bjavle Nybegynder
15. april 2005 - 18:13 #3
UPS SÅDAN HER:

if ($username == $goduser){
return 9999; // it's god, he has a really high userlevel.
}
else{
$query = "select userlevel from $tablename WHERE username = $username";
if ($result = mysql_query($query)) {
$row = mysql_fetch_array($result);
    $level = $row['userlevel'];
}
else{
    $level = 0;
return $level;
}
}
Avatar billede dennismp Nybegynder
15. april 2005 - 18:13 #4
$username bør escapes (addslashes) ellers kan man via den ændre din sql til at give det man ønsker.
Avatar billede saybot Nybegynder
15. april 2005 - 18:21 #5
ja problemet er at den ikke gider vise det som en admin skulle se, hvis den er sat til require_userlevel(1);

det virker som om den overhovedet ikke henter værdigen i databasen
Avatar billede saybot Nybegynder
15. april 2005 - 18:21 #6
værdien*
Avatar billede dennismp Nybegynder
15. april 2005 - 18:30 #7
Se evt hvordan det kan gå når man stoler på cookies: http://www.eksperten.dk/spm/609087

Jeg skal nok stoppe - hvis du ikke er interesseret i at få hjælp med sikkerheden. Men det er lidt nytteløst at tjekke om $level er et eller andet, hvis man kan få dit script til at "skifte bruger" (og der med til "god") uden at kende password eller lign.
Avatar billede saybot Nybegynder
15. april 2005 - 18:42 #8
ja okay tak for det... men nu var det lige den her del jeg ville have til at virke nu :)
Avatar billede ranglen Nybegynder
15. april 2005 - 18:51 #9
Jeg synes du skal lytte til dennismp, og omkode allerede nu til at bruge sessions. Når brugeren logger ind, så gemmer du samtidig hans level i en session. Så slipper du for at slå op i databasen hele tiden..
Avatar billede ranglen Nybegynder
15. april 2005 - 18:55 #10
har du kontrolleret at $username indholder hvad du tror den gør?
Avatar billede saybot Nybegynder
15. april 2005 - 19:04 #11
hmm... jeg tror jeg laver det hele om til sesssions...

men hvordan fungere de... har rigtig aldrig brugt dem så meget.

Her er deb fulde kode_________________________________________-
action = $_GET['action'];
$un = $_POST['un'];
$pw = $_POST['pw'];

switch ($action){
    case "login":
        login($un, $pw);
        break;
    case "logout":
        logout();
        header("Location: $redirect");
        break;
}


function logout() {

global $redirect;
setcookie("loggedin", $un, time()+3600); // 1 time
header("Location: index.php");
}


function loggedin() {

if (isset($_COOKIE['loggedin']))
    return true;
else
    return false;
}
function require_login() {
if (loggedin())
    return;
else
    include("login.html");
    die;

}

function login($un, $pw) {
    global $redirect;


if (auth($un,$pw)) {

setcookie("loggedin", $un, time()+3600); // logged in for an hour
header("Location: $redirect");
}
else
    echo "We're sorry, that username and/or password is incorrect";
    echo "Please<a href=$redirect>Go Back</a> and try again.";
}

function auth($un, $pw) {

global $tablename;
global $multiple_users;
global $godpw;
global $goduser;

if ($un == $goduser && $pw == $godpw) {
    return true;
}
else if($multiple_users)
{

    $query = "select password from $tablename WHERE username = '$un'";
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);
    if ($row['password'] == $pw)
        return true;
    else
        return false;
}
else
    return false;

}


function get_username() {

return $_COOKIE['loggedin'];
}


function get_level(){

$username = $_COOKIE['loggedin'];
global $tablename;
global $goduser;
if ($username == $goduser)
    return 9999;


$query = "select userlevel from $tablename WHERE username = $username";
if ($result = mysql_query($query)) {
$row = mysql_fetch_array($result);
    $level = $row['userlevel'];
}
else
    $level = 0;
return $level;
}



function require_userlevel($level) {
$ul = get_level();
if ($ul >= $level) {

    return;
}
else {
//    echo"<script language=javascript>alert('Sorry, you do not have access to this');</script>";
//  include("login.html");
    die;

}
}
Avatar billede saybot Nybegynder
16. april 2005 - 15:59 #12
noget i kan hjælpe med? at lave mine cookies om til sessions
Avatar billede dennismp Nybegynder
16. april 2005 - 17:38 #13
Har du læst det indlæg i den anden tråd jeg linkede til? Der skrev jeg en ultrakort intro til sessions (når man kommer fra cookies)
Avatar billede saybot Nybegynder
16. april 2005 - 17:39 #14
ja det har jeg kigget på... men jeg har problemer med at lave den her om: setcookie("loggedin", $un, time()+3600);
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