php - inlog

Status
Niet open voor verdere reacties.

softvieuw

Gebruiker
Lid geworden
15 mrt 2013
Berichten
29
beste,

ik heb geen vraag over een inlog (want dan krijg ik antwoord google en je hebt er 3 miljoen :)) maar een vraag over de beveiliging.

hoe beveilig je een inlog script nu het beste?
wat is dus het meest veilige voor inlog?
ik gebruik mysql.

softvieuw
 
wachtwoord met een sha256 hash versleutelen en een gegenereerde login hash opslaan in je database. die hash sla je dan op in je session en elke keer controleer je of die 2 met elkaar over een komen.
is een optie. zou ook kunnen hashen met de ip die ingelogd is. de keuze is reuze.
Maar maar je hash zo uniek mogelijk per bezoeker

Dit is een hash class die ik zelf gemaakt en bij elkaar gezocht heb!
PHP:
<?php

class Hash {
    
      public static function prepare_password($password) {
    // salt
    $salt = self::create("sha256", time(), rand());
    // hash (includes the salt)
    $hash = self::create("sha256", $password, $salt);
    
    return array('salt' => $salt, 'hash' => $hash);
  }
  
  public static function encrypt_password($password, $salt) {
     $hash = self::create("sha256", $password, $salt);
      return $hash;
  }

    /**
     * 
     * @param string $algo => sha256, sha1, md5, whirlpool
     * @param string $data => The data that needs to be hashed
     * @param string $salt => if you want to use a salt to make it more secure (optional)
     * @return Hashed data
     * @throws Exception => if an error is encoutered an exception will be thrown
     */
    static public function create($algo, $data, $salt = Null) {
        if ($algo && $data) {
            if($salt != Null && is_string($salt)){
                $context = hash_init($algo, HASH_HMAC, $salt);
            } else {
                $context = hash_init($algo);
            }
            
            if(!$context) {
                throw new Exception("Error salting data");
            }
            hash_update($context, $data);
            return hash_final($context);
        } else {
            throw new Exception("Creating hash failed");
        }
    }

    /**
     * token will provid a string or md5 string of a unique id 
     * 
     * @param string $salt => if you want to use a salt to make it more secure (optional)
     * @return string => unique id or if salt provided a salted version
     */
    static public function token($salt = NULL){
        $data = uniqid(microtime());
        if($salt != Null && is_string($salt))
            return self::create ("sha256", $data, $salt);
        else
            return $data;
    }
    
}
 
Laatst bewerkt door een moderator:
Ik ben geen expert op PHP, maar bovenstaand script maakt volgens mij een salt aan de hand van o.a. de tijd...
Als je dan een net ingevoerd wachtwoord vergelijkt met een record uit de database zal er nooit een match kunnen zijn aangezien beide gehasht zijn met een andere salt.
Of zie ik dat nu verkeerd?

Verder zou je voor extra veiligheid het hashen met javascript aan de client kant moeten doen voor je het wachtwoord verzend om te beveiligen tegen sniffers (software die netwerk pakketten registreert, als je je wachtwoord ongehasht verzend zonder HTTPS staat deze hier doodleuk tussen...).
Uiteraard nooit een wachtwoord opslaan als plain-text, niet in de user-records en evenmin in session records.

Ik neem aan dat je de MySQL input geheel schoonmaakt voordat je het uitvoert? Tegen SQL injecties.



EDIT: Oke voor een sessie id kan je wel een tijdsvariabel nemen, maar dan zou ik er geen wachtwoord waarde inzetten, dan is username en IP handiger.
 
Laatst bewerkt:
In plaats van zelf iets in elkaar te draaien kun je ook een script als dit gebruiken.

EDIT: voor de duidelijkheid, bovenstaand script is voor het versleutelen van de wachtwoorden in je database, bij inloggen komt natuurlijk wat meer kijken.
 
Laatst bewerkt:
oke bedankt voor de tips en phoba hoe dat script aan te roepen?
voor controle bedoel ik.

softvieuw
 
Het ging toch om het beveiligen en niet het maken van de inlogform!
Ligt er natuurlijk aan wat hij al gedaan heeft, maar ik ga er vanuit dat hij de data als veilig/schoon gemaakt heeft

require_once("Pad naar de class file");

echo Hash::Token();
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan