PHP Login script!!! HELP!!!

02/21/2011 11:28 douside#16
Dann benutzt du halt einen Salt. Oder du verbindest die Passwortabfrage mit einem Salt und zugleich wird dem Passwort, bevor php es mit md5 verschlüsselt, der Benutzername noch zusätzlich vorangestellt. Nenn mir bitte eine gute Alternative zu md5, die sicherer ist?
02/21/2011 12:00 boxxiebabee#17
Hier mal ein recht einfaches Login-Script mit Sessions

Login.php
PHP Code:
<?php
ob_start
();
include_once(
"config.inc.php");
mysql_connect($database_host$database_user$database_password);
mysql_select_db($database_name);

$username stripslashes(mysql_real_escape_string($_POST['username']));
$password stripslashes(mysql_real_escape_string(md5($_POST['password'])));


$sql="SELECT * FROM users WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);
if(
$count==1){
session_register("username");
header("location:index.php");
}
else {
echo 
"Wrong Username or Password";
}
ob_end_flush();
?>
config.inc.php
PHP Code:
<?php
$database_host 
"localhost";
$database_name "*****";
$database_user "*****";
$database_password "*****";
?>
@douside
3DES oder RIJNDAEL_128 wäre eine Möglichkeit.
Oder einfach das Passwort 2-3 mal mit MD5 verschlüsseln,
weil dann sollten die ganzen Online-Datenbanken machtlos sein.
Und wenn man will kann man ja noch das Ergebnis um X Stellen kürzen.
02/21/2011 13:48 douside#18
Kann mich irren aber ich meine gelesen zu haben das ein mehrfaches verschlüsseln durch md5 das finden des Passworts nicht sicherer macht, sondern genau das Gegenteil bewirkt.
Mit jeder weiteren Stufe steigt die Wahrscheinlichkeit für Kollisionen.
02/21/2011 14:08 black0utCpp#19
Quote:
Dann benutzt du halt einen Salt. Oder du verbindest die Passwortabfrage mit einem Salt und zugleich wird dem Passwort, bevor php es mit md5 verschlüsselt, der Benutzername noch zusätzlich vorangestellt. Nenn mir bitte eine gute Alternative zu md5, die sicherer ist?
SHA ? oder wie genannt : 3DES oder RIJNDAEL_128
02/21/2011 15:01 boxxiebabee#20
Quote:
Originally Posted by douside View Post
Kann mich irren aber ich meine gelesen zu haben das ein mehrfaches verschlüsseln durch md5 das finden des Passworts nicht sicherer macht, sondern genau das Gegenteil bewirkt.
Mit jeder weiteren Stufe steigt die Wahrscheinlichkeit für Kollisionen.
Ja hast recht, hab daran nicht wirklich gedacht.

Hab mich jz mal schnell an ein neues Login rangemacht, mit SaltedHash.

config.inc.php
PHP Code:
<?php
$database_host 
"localhost";
$database_name "*****";
$database_user "*****";
$database_password "*****";
?>
saltIt.php
PHP Code:
<?php
function saltIt($password$salt=null)
{
  
$saltHash = array();  
  
$saltHash['salt'] = $salt;
  
$saltHash['password'] = $password;
  
$saltHash['saltedHash'] = null;
  
  
$saltHash['privateKey'] = "
  PU-oD(FaiPloe>o2A9]IU&-r[F}{j=p<,@Y5N<3>66)i;r?}}#7{?XjZ7Lxp.t
  uI+sx:R7#(fRA(%0)[Hf*qx;;eoC8%rn/dXmv-n/p&a6?HkL<=nmSljv.P.M\&
  rj1ay]8*BjT>N@Wt:oDbCA?Y[6Yp{HZa;}jLO:aW)0X;?5)n@%D{zk:F\q>%i,
  2,in*mUEfK(d8.[u0H(*k2_KVI\<,*7T23uqmNjvR).Q%R}D{9SC.MyUag+4X<
  UR_3gH&%Etg=Jy@ZK2xX)STxC5jl\dPetJc)MTD.15izLLQ&TBS={UKt83z{1Q
  v(TjoClVx[zj5lj<OvF_mq[GsAxa)kaizTnuJl!80l@XG?#iTl)IB7Jd(,3BSg
  jzJS\kL.F<45ESW?GDd37H4A3P}7<{Rx=:>OqM(wT]f]_sKS@(8];jPMQov*rp
  &S&eZQ+6bNN-<x=St/Aly3e{>;0STBR7m.V/7Fo8z@/6r<F9wvU66{Kxb-A&:@"
;

  if(
$saltHash['salt'] == null)
  {
    
$saltHash['salt'] = microtime();
    
$saltHash['salt'] = crc32($saltHash['salt']);
    
$saltHash['salt'] = pack('N'$saltHash['salt']);    
    
$saltHash['salt'] = base64_encode($saltHash['salt']);
    
$saltHash['salt'] = substr($saltHash['salt'], 06);
  }
  else if(
strpos($saltHash['salt'], "|") !== false)
  {
    
$saltHash['salt'] = substr($saltHash['salt'], 0strpos($saltHash['salt'], "|"));
  }
  
$saltHash['saltedHash'] = $saltHash['salt'];
  
$saltHash['saltedHash'].= "|";
  
$saltHash['saltedHash'].= sha1($saltHash['privateKey']);
  
$saltHash['saltedHash'].= sha1($saltHash['salt'].$saltHash['password']);
  return 
$saltHash['saltedHash'];
}
?>
login.php
PHP Code:
<?php
ob_start
();
include_once(
"saltIt.php");
include_once(
"config.inc.php");
mysql_connect($database_host$database_user$database_password) or die ("Couldn't connect.");
mysql_select_db($database_name) or die ("No database with this name.");

$username stripslashes(mysql_real_escape_string($_POST['username']));
$password stripslashes(mysql_real_escape_string($_POST['password']));

$saltedHash null;
$databaseSaltedHash null;

$saltedHash saltIt($password);

$sql="SELECT password FROM users WHERE username='$username'";
$result=mysql_query($sql);
$databaseSaltedHash mysql_fetch_object($result);
$databaseSaltedHash $databaseSaltedHash ->password;

if(
saltIt($password$databaseSaltedHash) == $databaseSaltedHash)
{
  
session_register("username");
  echo 
"Successfully.";
}
else
{
  echo 
"Failed.";
}
ob_end_flush();
?>
freue mich über feedback ;)