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;
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; } }
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.
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.
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..
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;
ja det har jeg kigget på... men jeg har problemer med at lave den her om: setcookie("loggedin", $un, time()+3600);
Synes godt om
Ny brugerNybegynder
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.