Passwort Verschlüsslung im eigenen Login Formular

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
cepheus
Mitglied
Beiträge: 3
Registriert: 09.12.2010 13:17

Passwort Verschlüsslung im eigenen Login Formular

Beitrag von cepheus »

Morgen, ich sitze jetzt seit 1 Woche an meinen Problem und komme einfach nicht weiter...
Ich habe jetzt schon so viel über die PHPbb Passwort Verschlüsslung gelesen und habe immer noch keine Ahnung wie ich die Verschlüsselung ein mein Loginformular einbaue.

Ich will einfach nur überprüfen ob das eingegebene Passwort mit dem gespeicherten übereinstimmt.
Ich habe immer wieder gelesen das diese Codefragmente aus der functions.php erklären wie es geht

Code: Alles auswählen

<?php
/**
* Hash the password
*/
function phpbb_hash($password)
{
  $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

  $random_state = unique_id();
  $random = '';
  $count = 6;

  if (($fh = @fopen('/dev/urandom', 'rb')))
  {
    $random = fread($fh, $count);
    fclose($fh);
  }

  if (strlen($random) < $count)
  {
    $random = '';

    for ($i = 0; $i < $count; $i += 16)
    {
      $random_state = md5(unique_id() . $random_state);
      $random .= pack('H*', md5($random_state));
    }
    $random = substr($random, 0, $count);
  }

  $hash = _hash_crypt_private($password, _hash_gensalt_private($random, $itoa64), $itoa64);

  if (strlen($hash) == 34)
  {
    return $hash;
  }

  return md5($password);
}

/**
* Check for correct password
*
* @param string $password The password in plain text
* @param string $hash The stored password hash
*
* @return bool Returns true if the password is correct, false if not.
*/
function phpbb_check_hash($password, $hash)
{
  $itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
  if (strlen($hash) == 34)
  {
    return (_hash_crypt_private($password, $hash, $itoa64) === $hash) ? true : false;
  }

  return (md5($password) === $hash) ? true : false;
} 

?>

Hier der code von meiner Loginseite:

Code: Alles auswählen

<?php require_once('Connections/dbconnect.php'); ?> 
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
{
  if (PHP_VERSION < 6) {
    $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  }

  $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

  switch ($theType) {
    case "text":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;    
    case "long":
    case "int":
      $theValue = ($theValue != "") ? intval($theValue) : "NULL";
      break;
    case "double":
      $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
      break;
    case "date":
      $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
      break;
    case "defined":
      $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
      break;
  }
  return $theValue;
}
}
?> 
<?php
// *** Validate request to login to this site.
if (!isset($_SESSION)) {
  session_start();
}

$loginFormAction = $_SERVER['PHP_SELF'];
if (isset($_GET['accesscheck'])) {
  $_SESSION['PrevUrl'] = $_GET['accesscheck'];
}

if (isset($_POST['benutzer'])) {
  $loginUsername= strtolower($_POST['benutzer']);
  $password=$_POST['Kennwort'];
  $MM_fldUserAuthorization = "group_id";
  $MM_redirectLoginSuccess = "selection.php";
  $MM_redirectLoginFailed = "login.php";
  $MM_redirecttoReferrer = false;
  mysql_select_db($database_dbconnect, $dbconnect);
    
  $LoginRS__query=sprintf("SELECT username_clean, user_password, group_id FROM phpbb_users WHERE username_clean=%s AND user_password=%s",
  GetSQLValueString($loginUsername, "text"), GetSQLValueString($password, "text")); 
   
  $LoginRS = mysql_query($LoginRS__query, $dbconnect) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
    
    $loginStrGroup  = mysql_result($LoginRS,0,'group_id');
    
  if (PHP_VERSION >= 5.1) {session_regenerate_id(true);} else {session_regenerate_id();}
    //declare two session variables and assign them
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;       

    if (isset($_SESSION['PrevUrl']) && false) {
      $MM_redirectLoginSuccess = $_SESSION['PrevUrl'];  
    }
    header("Location: " . $MM_redirectLoginSuccess );
  }
  else {
    header("Location: ". $MM_redirectLoginFailed );
  }
}
?> 
 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Unbenanntes Dokument</title>
</head>
 
<body>
<table border="1" align="center">
  <tr>
    <th>Login</th>
  </tr>
  <tr>
    <td>
     
    <form ACTION="<?php echo $loginFormAction; ?>" id="loginform" name="loginform" method="POST">
  <table>
    <tr>
      <td>Benutzername: </td>
      <td><input name="benutzer" type="text" id="benutzer" size="20" maxlength="20" /></td>
      <td>&nbsp;</td>
    </tr>
    <tr>
      <td>Passwort: </td>
      <td><input name="Kennwort" type="text" id="Kennwort" size="20" maxlength="20" /></td>
      <td><input type="submit" name="button" id="button" value="Senden" /></td>
    </tr>
  </table>
</form>
     
    </td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>

Diese Frage wurde auch schon mal hier
viewtopic.php?f=93&t=156897 und hier
http://www.phpbb.com/community/viewtopi ... &t=2109105 gestellt ,
aber werd einfach nicht schlau daraus... Ich bitte um einen Denkanstoß :-)
cepheus
Mitglied
Beiträge: 3
Registriert: 09.12.2010 13:17

Re: Passwort Verschlüsslung im eigenen Login Formular

Beitrag von cepheus »

Kann mir bitte irgendwer helfen ?
Benutzeravatar
cYbercOsmOnauT
Ehemaliges Teammitglied
Beiträge: 3820
Registriert: 18.02.2004 23:02
Wohnort: Göttingen
Kontaktdaten:

Re: Passwort Verschlüsslung im eigenen Login Formular

Beitrag von cYbercOsmOnauT »

Erst einmal eine Frage: Willst Du das Hashsystem von phpBB verstehen und für Deinen Login umsetzen oder möchtest Du die Usertabelle von phpBB für Deinen Login nutzen, sprich einen phpBB Login durchführen für Deine Seite?

Grüße,
Tekin
• prof. phpbb-Installation, Reparatur, Rettung nach Hackattacken, sowie PHP/JS Programmierung aller Art
Zend Certified Engineer, Linux Administrator und die Sicherheit von 34 Jahren Programmiererfahrung
• Interesse? Kontakt unter t.birduezen@web-coding.eu
cepheus
Mitglied
Beiträge: 3
Registriert: 09.12.2010 13:17

Re: Passwort Verschlüsslung im eigenen Login Formular

Beitrag von cepheus »

Ich arbeite erst seit kurzem mit PHP und bin deshalb noch am lernen, ich würde es gerne verstehen, befürchte aber das das ganze noch etwas zu komplex für meinen Wissensstand ist.

Ich will das Hashsystem von phpBB in meine Loginseite einbauen und überprüfen ob das Passwort stimmt.
Ich will nur auf die Benutzerdaten von phpBB aus der Datenbank zur Anmeldung nutzen, mein Script soll komplett eigenständig laufen.

Ich habe es auch schon mit einen Redirect über die phpBB Loginseite versucht:

Code: Alles auswählen

<form action="./ucp.php?mode=login" method="post">
    <label for="username">Username:</label>
    <input type="text" name="username" id="username" size="10" title="Username" />
    <label for="password">Password:</label>
    <input type="password" name="password" id="password" size="10" title="Password" />
    <input type="hidden" name="redirect" value="./zielseite.php" />
    <input type="submit" name="login" value="Login" />
</form>
Es funktioniert zwar, ist aber nicht das was ich mir vorstelle.
Benutzeravatar
Elsensee
Ehemaliges Teammitglied
Beiträge: 832
Registriert: 19.05.2010 15:14
Wohnort: Hamburg
Kontaktdaten:

Re: Passwort Verschlüsslung im eigenen Login Formular

Beitrag von Elsensee »

Hmm...
Das wird kompliziert - ich würde es nicht schaffen.

Du musst wenn du - wirklich NUR - auf die Login-Daten zurückgreifen möchtest, die Funktionen zum Login von phpBB implentieren.
Heißt folgendes:
Den in der Datenbank abgespeicherten Passwort-Hash raussuchen. Würde mit dem PHP-Code

Code: Alles auswählen

$sql = "SELECT `user_password` FROM `" . USERS_TABLE . "` WHERE `username` = " . $EINGEGEBENER_LOGIN;
vielleicht funktionieren. Das musst du dann noch auswerten mit einer Zuweisung wie der hier:

Code: Alles auswählen

$db_hash = $db->sql_query($sql);
und dann musst du die Funktion "phpbb_check_hash" ausführen. Etwa so:

Code: Alles auswählen

$stimmt_ueberein = phpbb_check_hash($eingegebenes_passwort, $db_hash);
Wenn dann "$stimmt_ueberein" true ist, stimmen die Passwörter überein - wenn false, dann nicht.

Jetzt musst du nur noch die benötigten phpBB-Dateien includen. Dafür solltest du noch

Code: Alles auswählen

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
am Anfang der Datei hinzufügen. Hier hättest du z.B. die Datei "common.php" includet - aber das siehst du ja selber.

Damit diese Zeilen funktionieren, müsste deine PHP-Datei im Root-Path des phpBB-Forums liegen. Wenn nicht kannst du natürlich auch die Variable "$phpbb_root_path" ändern.

Den Rest überlass ich dir. :grin:
Posts mostly powered by GitHub and phpBB.de Cross-Reference

2015-03-20 - Never forget 8)
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“