Authenticatie URL parameter

Status
Niet open voor verdere reacties.

PatrickStel

Gebruiker
Lid geworden
20 mei 2015
Berichten
39
Goedemorgen,

Ik ben bezig met een e-learning maar ik zit nu echter vast.
Kunnen jullie mij tips & advies geven? gelieve niet de oplossing zodat ik er zelf wat van leer :)

Het script bestaat uit 3 functies en een switch case, ik moest authenticatie inbouwen dat is me al wel geluk.
Het probleem wat nu bestaat is http://www.ditisdeurl/index.php?cmd=view&vault=2 die parameter bij vault is natuurlijk heel makkelijk te veranderen naar 1 of 3 en omdat je de inlog voorbij bent word daar niks meer gecheckt.

PHP:
<?  
/*                                                                                              
 * Deze applicatie is de basis van een zeer eenvoudige online kluis. Vul                        
 * de applicatie aan door authenticatie en autorisatie toe te voegen.                           
 *                                                                                              
 * De database met een gebruiker 'gert' en wachtwoord                                           
 * 'hetregenteenkleinbeetje' staat al voor je klaar. Je hoeft dus geen                          
 * database commando's te schrijven.                                                            
 *                                                                                              
 * Let op: in de database staat het wachtwoord gehashed, gestretched en
 * en gesalt met behulp van de PBKDF2 functie met de volgende instellingen:
 * SHA2 voor hashing, 10.000 iteraties en een uitvoerlengte van 40 tekens. 
 * De hash staat in de kolom "hash" en de salt in de kolom "salt".
 */


    /*                                                                                          
     * gegeven een gebruikersnaam en wachtwoord, controleer of deze kloppen                     
     * en geef het user-id van de gebruiker terug                                               
     */ 
    function login($username, $password) {
        $result = read_password_salt($username, $password);

        if (!$result) {
            return false;
        }

        $database_hash = $result['hash'];
        $database_salt = $result['salt'];

        // controleer of het wachtwoord klopt
		$check_hash = hash_pbkdf2("sha256", $password, $database_salt, 10000, 40);
		if ($check_hash == $database_hash){
			return $result['id'];
		} 
        

    }

    /*                                                                                          
     * gegeven een user-id, geef de inhoud van deze vault weer                                  
     */ 
    function view($userid) {
        $sql = new mysqli("localhost", "vault", "vault", "vault_nl2");
        $stmt = $sql->prepare("SELECT contents FROM vaults WHERE user_id = ?");
        $stmt->bind_param("i", $userid);
        if (!$stmt->execute() || !$stmt->store_result()|| !$stmt->num_rows) {
            return;
        }
        $stmt->bind_result($contents);
        $stmt->fetch();
        return $contents;
    }

    /*                                                                                          
     * gegeven een username, lees het password en de salt voor deze                             
     * gebruiker uit de database                                                                
     */ 
    function read_password_salt($username, $password) {
        $sql = new mysqli("localhost", "vault", "vault", "vault_nl2");
        $stmt = $sql->prepare("SELECT id, hash, salt FROM users WHERE " .
            "username = ?");
        $stmt->bind_param("s", $username);
		$stmt->execute();
        $stmt->bind_result($id, $hash, $salt);
        
		if($stmt->fetch() !== TRUE) {
			return FALSE;
		}
		$check_hash = hash_pbkdf2("sha256", $password, $salt, 10000, 40);
		if ($check_hash !== $hash){
			return FALSE;
		} 
		return [ "id" => $id, "hash" => $hash, "salt" => $salt ];
    }

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
</head>
<body>
<?
    if (isset($_REQUEST['cmd'])) {
        $cmd = $_REQUEST['cmd'];
    } else {
        $cmd = "";
    }

    switch($cmd) {
		
		
        case "login":
            if (!isset($_POST['username']) || !isset($_POST['password'])) {
                exit;
            }
            $userid = login($_POST['username'], $_POST['password']);
            if (isset($userid)) {
            ?>
                <p>Klik <a href="index.php?cmd=view&vault=<?=intval($userid)?>">hier</a>
                   om je kluis te bekijken</p>
            <?
                exit;
            } else {
                print("Login mislukt");
            }
            break;
			
			
        case "view":
            if (!isset($_GET['vault'])) {
                exit;
            }
			#if ($userid == $_GET['vault']) {
				echo $_GET['vault'];
				
            print "Kluis inhoud: " . htmlspecialchars(view($_GET['vault']));
            break;
			#}
			
        default:
?>
            <form method="POST" action="index.php">
                <input type="hidden" name="cmd" value="login"/>
                <p>Username: <input type="text" name="username"/></p>
                <p>Wachtwoord: <input type="password" name="password"/></p>
                <p><input type="submit"/></p>
            </form>
<?
    }
?>

Alvast bedankt,
Patrick
 
Je zegt het eigenlijk zelf al.
[..] en omdat je de inlog voorbij bent word daar niks meer gecheckt.
Dat moet je dus wel doen, je kunt daarbij gebruik maken van de $_SESSION. Je kunt daarin gegevens opslaan voor de duur van de browsersessie.

Het is trouwens goed dat je de wachtwoorden gehashed opslaat, maar het is beter om de in PHP ingebouwde password_hash en password_verify functies te gebruiken.
 
Bedankt voor de tip.

Ik zal eens even gaan knutselen met $_SESSION.

Gr,
Patrick
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan