Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 05:23

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Passwort Verschlüsselung bei Regi + Login !?

Discussion on Passwort Verschlüsselung bei Regi + Login !? within the General Coding forum part of the Coders Den category.

Reply
 
Old 09/23/2011, 18:55   #16
 
elite*gold: 6
Join Date: Mar 2010
Posts: 416
Received Thanks: 221
By the way: So wie ich das gesehn hab beim drüberfliegen:
Vulns:
-XSS
-SQLI
finaldown97 is offline  
Old 09/23/2011, 18:56   #17
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Quote:
Originally Posted by Metin2Spieler97 View Post
Naja, es erschwert trotzdem das Cracken eines md5-Hashes. ;O
naaaaaaaaaaaaaaaja .... trotzdem ists sicherer und sinnvoller den salt extra zu speichern und für jeden hash wieder individuell zu machen...

so hashe ich meine passwörter, bevor ich die in ne db schreib
PHP Code:
$salt random_str();
$salt2 random_str(32);
$salt3 random_str(128);
$salt4 random_str(256);
$password htmlspecialchars(md5(md5($_POST['pw'].$salt.md5($salt2.md5($_POST['pw'].$salt3.md5($salt4.$_POST['pw']))))));
write_to_db("user""pw"$password);
write_to_db("user""salt"$salt);
write_to_db("user""salt2"$salt2);
write_to_db("user""salt3"$salt3);
write_to_db("user""salt4"$salt4); 
die hashes knackt mir so schnell niemand mehr

höhö

€dit: final hast natürlich recht, xss sicherheit muss gewehrleistet werden (geht mit htmlspecialchars($zeuch); )
die SQL-Improved extension muss er ned umbedingt verwendenden, mitm standart-müll gehts doch auch... außer er will auf hohe besucherzahlen + schnelle server auslegen, is aber gschmarre ^^
Che is offline  
Old 09/23/2011, 19:22   #18
 
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
Habe in meiner Datenbank unter "filecache" Tabelle "key" gefunden, dort sind viele 32-stellige "hashes" oder wie man das da nennt ^^

PHP Code:
<?php

// Check if he wants to register:
if (!empty($_POST[email]))
{
    
// Check if passwords match.
    
if ($_POST[password] != $_POST[password2])
        exit(
"Error - Passwörter stimmen nicht überrein. Bitte versuche es noch einmal.");

    
// Assign some variables.
    
$ip $_SERVER[REMOTE_ADDR];
    
$salt "PASSWORDUNIQUESTRING";
    
$password md5($_POST['password'].$SALT);
  

    require_once(
"connect.php");

    
// Register him.
     
$query mysql_query("INSERT INTO user 
    (email, displayName, name, password, bday, salt)
    VALUES    ('
$_POST[email]','$_POST[displayName]','$_POST[name]','$password','$bday','PASSWORDUNIQUESTRING')")
    or die (
"Error - Registrieren fehlgeschlagen.");  

$query mysql_query("SELECT * FROM 'user' WHERE email = '$email'");
if (
mysql_fetch_row($query)) {
echo 
"Bitte andere Username";
} else
    
    echo 
"Welcome $_POST[username]! You've been successfully reigstered!<br /><br />
        Please login <a href='index.php'><b>here</b></a>."
;
    exit();
}

?>

<html>
    <head>
        <title>Registrieren</title>
    </head>
    <body>
        <form action="register.php" method="post">
            <table width="75%" border="1" align="center" cellpadding="3" cellspacing="1">
                <tr>
                    <td width="100%"><h5>Registration</h5></td>
                </tr>
                <tr>
                    <td width="100%"><label>Email: <input type="text" name="email" size="25" value="<? echo $_POST[email]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Anzeige-Name: <input type="text" name="displayName" size="25" value="<? echo $_POST[displayName]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Name: <input type="text" name="name" size="25" value="<? echo $_POST[name]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Passwort: <input type="password" name="password" size="16" value="<? $password md5($_POST['password']); ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Passwort wiederholen: <input type="password" name="password2" size="16" value=""></label></td>
                </tr>
                <tr>
                    <td width="100%"><input type="submit" value="Registrieren!"></td>
                </tr>
            </table>
        </form>
    </body>
</html>
Aus der Datenbank (s.o.)

PHP Code:
vollständige Textfelder     key     expires     size
    Bearbeiten     Löschen     7d17e3a478196a93b8af127c02b4ff9e     1319475867     173
    Bearbeiten     Löschen     db4fdf5d60c33e22288a27d2169eaef5     1319401861     77
    Bearbeiten     Löschen     1cc4c4e6af16031bd616d29ed11273c5     1317328179     170
    Bearbeiten     Löschen     83e461dac15743e794d2176dd9e13ff5     1348209752     13
    Bearbeiten     Löschen     d577aa59bef558db0727318f8de260e0     1348209752     13
    Bearbeiten     Löschen     7e1004285e665bc60c38e8fee728d4cd     1319469389     8
    Bearbeiten     Löschen     7143677734dfeea5c51aae86f3477cd3     1317295063     149
    Bearbeiten     Löschen     1079a7f805b610d0eb900ed5de17e4b3     1317331292     128
    Bearbeiten     Löschen     ab411c0f391f353bbfff114ac241cb31     1317331292     3314
    Bearbeiten     Löschen     08f646df888cd27fc7b89dc5645fdaf1     1317331292     1613
    Bearbeiten     Löschen     56b6acbddbf3a89b6175721ca7e5eb90     1317331292     1188
    Bearbeiten     Löschen     684df77efb74d38cdb06af6ced5c0614     1317331292     729
    Bearbeiten     Löschen     b5e312b34c48a5714b335594dfb2e444     1317331292     218
    Bearbeiten     Löschen     4f7b8b387300ad6588184ac5d1f21ef2     1317331292     139
    Bearbeiten     Löschen     ab8a8e7c6bbc08c4517ffc18b09d4ccb     1317331292     1355
    Bearbeiten     Löschen     9d327e87fb56fb5f22f90488eab17337     1317331292     1200
    Bearbeiten     Löschen     18d3a1d05494de6de42b2620081e5163     1317331292     335
    Bearbeiten     Löschen     7a9623a664e0598ab46d55d8ab82e9fa     1317331292     1697
    Bearbeiten     Löschen     53af39093cc972c6147c06c0bfae1880     1317331292     1246
    Bearbeiten     Löschen     c82351a0395d19d1a51499e78de9d368     1317331292     654
    Bearbeiten     Löschen     7f96218cca3d369bcc83e1ff5881a07e     1317331292     3743
    Bearbeiten     Löschen     aff325da4dcdbcf90b6b7d47e8b8782c     1317402313     7
    Bearbeiten     Löschen     7aadcf96c5eb8e7aff17644821990ee5     1317402309     55
    Bearbeiten     Löschen     d775ed725481ac6691deee5e7bb2f2ad     1317402309     984
    Bearbeiten     Löschen     79cefee57ad790e145061afae497faec     1317278580     313
    Bearbeiten     Löschen     aad77dbb143cfab111fa9f73e592de54     1317402313     7
    Bearbeiten     Löschen     90ab9cd79ea27ad5af5d75cb58ea2302     1317331426     130
    Bearbeiten     Löschen     c716010f9c052249df573d74fcaa31ca     1317331426     4055
    Bearbeiten     Löschen     890c91f06790f2fb22bad773e16aabc5     1317331426     2189
    Bearbeiten     Löschen     8488ec2c7bace28d2ff7c383c42ba6bd     1317331426     1320 
Edit:

Funktionier immernoch nicht
NoWe53 is offline  
Old 09/23/2011, 22:38   #19
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Quote:
Originally Posted by nicileie View Post
Habe in meiner Datenbank unter "filecache" Tabelle "key" gefunden, dort sind viele 32-stellige "hashes" oder wie man das da nennt ^^

PHP Code:
<?php

// Check if he wants to register:
if (!empty($_POST[email]))
{
    
// Check if passwords match.
    
if ($_POST[password] != $_POST[password2])
        exit(
"Error - Passwörter stimmen nicht überrein. Bitte versuche es noch einmal.");

    
// Assign some variables.
    
$ip $_SERVER[REMOTE_ADDR];
    
$salt "PASSWORDUNIQUESTRING";
    
$password md5($_POST['password'].$SALT);
  

    require_once(
"connect.php");

    
// Register him.
     
$query mysql_query("INSERT INTO user 
    (email, displayName, name, password, bday, salt)
    VALUES    ('
$_POST[email]','$_POST[displayName]','$_POST[name]','$password','$bday','PASSWORDUNIQUESTRING')")
    or die (
"Error - Registrieren fehlgeschlagen.");  

$query mysql_query("SELECT * FROM 'user' WHERE email = '$email'");
if (
mysql_fetch_row($query)) {
echo 
"Bitte andere Username";
} else
    
    echo 
"Welcome $_POST[username]! You've been successfully reigstered!<br /><br />
        Please login <a href='index.php'><b>here</b></a>."
;
    exit();
}

?>

<html>
    <head>
        <title>Registrieren</title>
    </head>
    <body>
        <form action="register.php" method="post">
            <table width="75%" border="1" align="center" cellpadding="3" cellspacing="1">
                <tr>
                    <td width="100%"><h5>Registration</h5></td>
                </tr>
                <tr>
                    <td width="100%"><label>Email: <input type="text" name="email" size="25" value="<? echo $_POST[email]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Anzeige-Name: <input type="text" name="displayName" size="25" value="<? echo $_POST[displayName]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Name: <input type="text" name="name" size="25" value="<? echo $_POST[name]; ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Passwort: <input type="password" name="password" size="16" value="<? $password md5($_POST['password']); ?>"></label></td>
                </tr>
                <tr>
                    <td width="100%"><label>Passwort wiederholen: <input type="password" name="password2" size="16" value=""></label></td>
                </tr>
                <tr>
                    <td width="100%"><input type="submit" value="Registrieren!"></td>
                </tr>
            </table>
        </form>
    </body>
</html>
Aus der Datenbank (s.o.)

PHP Code:
vollständige Textfelder     key     expires     size
    Bearbeiten     Löschen     7d17e3a478196a93b8af127c02b4ff9e     1319475867     173
    Bearbeiten     Löschen     db4fdf5d60c33e22288a27d2169eaef5     1319401861     77
    Bearbeiten     Löschen     1cc4c4e6af16031bd616d29ed11273c5     1317328179     170
    Bearbeiten     Löschen     83e461dac15743e794d2176dd9e13ff5     1348209752     13
    Bearbeiten     Löschen     d577aa59bef558db0727318f8de260e0     1348209752     13
    Bearbeiten     Löschen     7e1004285e665bc60c38e8fee728d4cd     1319469389     8
    Bearbeiten     Löschen     7143677734dfeea5c51aae86f3477cd3     1317295063     149
    Bearbeiten     Löschen     1079a7f805b610d0eb900ed5de17e4b3     1317331292     128
    Bearbeiten     Löschen     ab411c0f391f353bbfff114ac241cb31     1317331292     3314
    Bearbeiten     Löschen     08f646df888cd27fc7b89dc5645fdaf1     1317331292     1613
    Bearbeiten     Löschen     56b6acbddbf3a89b6175721ca7e5eb90     1317331292     1188
    Bearbeiten     Löschen     684df77efb74d38cdb06af6ced5c0614     1317331292     729
    Bearbeiten     Löschen     b5e312b34c48a5714b335594dfb2e444     1317331292     218
    Bearbeiten     Löschen     4f7b8b387300ad6588184ac5d1f21ef2     1317331292     139
    Bearbeiten     Löschen     ab8a8e7c6bbc08c4517ffc18b09d4ccb     1317331292     1355
    Bearbeiten     Löschen     9d327e87fb56fb5f22f90488eab17337     1317331292     1200
    Bearbeiten     Löschen     18d3a1d05494de6de42b2620081e5163     1317331292     335
    Bearbeiten     Löschen     7a9623a664e0598ab46d55d8ab82e9fa     1317331292     1697
    Bearbeiten     Löschen     53af39093cc972c6147c06c0bfae1880     1317331292     1246
    Bearbeiten     Löschen     c82351a0395d19d1a51499e78de9d368     1317331292     654
    Bearbeiten     Löschen     7f96218cca3d369bcc83e1ff5881a07e     1317331292     3743
    Bearbeiten     Löschen     aff325da4dcdbcf90b6b7d47e8b8782c     1317402313     7
    Bearbeiten     Löschen     7aadcf96c5eb8e7aff17644821990ee5     1317402309     55
    Bearbeiten     Löschen     d775ed725481ac6691deee5e7bb2f2ad     1317402309     984
    Bearbeiten     Löschen     79cefee57ad790e145061afae497faec     1317278580     313
    Bearbeiten     Löschen     aad77dbb143cfab111fa9f73e592de54     1317402313     7
    Bearbeiten     Löschen     90ab9cd79ea27ad5af5d75cb58ea2302     1317331426     130
    Bearbeiten     Löschen     c716010f9c052249df573d74fcaa31ca     1317331426     4055
    Bearbeiten     Löschen     890c91f06790f2fb22bad773e16aabc5     1317331426     2189
    Bearbeiten     Löschen     8488ec2c7bace28d2ff7c383c42ba6bd     1317331426     1320 
Edit:

Funktionier immernoch nicht
Kp was das für Keys sind...
Musst auf jeden in deiner Tabelle n neues Feld anfügen sonst wirds nüscht
Che is offline  
Old 09/23/2011, 22:40   #20
 
elite*gold: 6
Join Date: Mar 2010
Posts: 416
Received Thanks: 221
@〤Che〤
Verstehst du nicht genau was SQLI ist?
Ich kann über das POST-Array welches nicht via mysql_real_escape_string geprüft wird eigenen SQL-Code injecten. Sehr gefährliche Lücke!!!
finaldown97 is offline  
Old 09/24/2011, 15:11   #21
 
elite*gold: 0
Join Date: Oct 2008
Posts: 319
Received Thanks: 88
Quote:
Originally Posted by finaldown97 View Post
@〤Che〤
Verstehst du nicht genau was SQLI ist?
Ich kann über das POST-Array welches nicht via mysql_real_escape_string geprüft wird eigenen SQL-Code injecten. Sehr gefährliche Lücke!!!
Wobei mysql_real_escape auch nicht 100% sicher ist. Am besten ist es
eine Whitelist anzulegen und den String über einen Regulären Ausdrück prüfen
zu lassen.
Einen eigenen Salt für jeden Benutzer neu zu generieren ist zwar keine
schlechte Idee aber vollkommen unnötig. Verwendest du einen salt wie
"fsUdnfna8273jd&"mf" Also einfach ein String aus zufälligen Zeichen reicht
das vollkommen aus, da md5 bisher unknackbar ist, und bei einem solchem
Salt Rainbotables vollkommen nutzlos sind.
Fratyr is offline  
Old 09/24/2011, 18:54   #22
 
elite*gold: 6
Join Date: Jul 2009
Posts: 88
Received Thanks: 9
Schön wenn ihr das geklärt habt, aber leider weicht ihr vom Thema ab, will nurnoch hinkriegen, dass das mit dem Registrieren klappt *bettel*
NoWe53 is offline  
Old 09/25/2011, 18:34   #23
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Zu dem SQLI... jo hab ich falsch verstanden, dachte du meinst die SQLi-Extension, weil sie schneller ist...

Quote:
Originally Posted by Fratyr View Post
Wobei mysql_real_escape auch nicht 100% sicher ist. Am besten ist es
eine Whitelist anzulegen und den String über einen Regulären Ausdrück prüfen
zu lassen.
Einen eigenen Salt für jeden Benutzer neu zu generieren ist zwar keine
schlechte Idee aber vollkommen unnötig. Verwendest du einen salt wie
"fsUdnfna8273jd&"mf" Also einfach ein String aus zufälligen Zeichen reicht
das vollkommen aus, da md5 bisher unknackbar ist, und bei einem solchem
Salt Rainbotables vollkommen nutzlos sind.
Zu deiner Behauptung, dass man md5-Hahses nicht knacken kann:




Funktionieren soweit ich weiß alle mit gigantischen Rainbowtables

Und wer es gerne lokal will:




(Laufen alle übern GPU, weil der bis zu 20 mal schneller als der CPU ist...)

Also behaupte nicht, dass man md5-Hashes nicht Cracken kann... Wenn er gesalzen ist, dann machste halt 2 Crackvorgänge...

Also per Bruteforce + gigantischen Rainbowtables ist es möglich sowas zu Cracken... Die Liste dient jetzt nicht zu irgendwelchen kriminellen Aktionen, sondern nur zur Demonstration, dass es sehrwohl möglich ist und nix besonderes ist... (Liste per Google in 5 Minuten zusammengestellt... es gab mal noch ne Seite die besser war aber die find ich grad ned)

Das was du über mysql_real_escape sagst, ist vollkommen richtig... Man sollte bei Projekten, bei denen man auf die Sicherheit achtet alles verbieten, bis auf das, was man selbst machen will/muss!

@nici: Sieh dir meine letzten Posts an, wenn du sie verstanden hast, kannst du dir daraus innerhalb von n paar minuten n voll funktionsfähiges Registrations/Login-Script basteln...
Che is offline  
Old 09/25/2011, 20:04   #24
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,345
Quote:
Originally Posted by Fratyr View Post
Wobei mysql_real_escape auch nicht 100% sicher ist. Am besten ist es
eine Whitelist anzulegen und den String über einen Regulären Ausdrück prüfen
zu lassen.
Einen eigenen Salt für jeden Benutzer neu zu generieren ist zwar keine
schlechte Idee aber vollkommen unnötig. Verwendest du einen salt wie
"fsUdnfna8273jd&"mf" Also einfach ein String aus zufälligen Zeichen reicht
das vollkommen aus, da md5 bisher unknackbar ist, und bei einem solchem
Salt Rainbotables vollkommen nutzlos sind.
Wenn man einen eigenen Salt für jedes Passwort generiert, dann sind Rainbow-Tables nutzlos. Wenn man allerdings den selben Salt für jedes Passwort benutzt, dann kann man sich einfach neue Rainbow-Tables mit dem Salt generieren.

Aus dem Grund sollte man auch nicht überall den selben Salt verwenden, ganz egal wie lang er ist.
ms​ is offline  
Old 09/25/2011, 21:11   #25
 
elite*gold: 6
Join Date: Mar 2010
Posts: 416
Received Thanks: 221
Btw: mysql_real_escape_string ist eigentlich recht sicher, nicht wie Fratyr meint.
Jedoch ist darauf zu achten bei SqlQuerys wie "SELECT * FROM döner WHERE id = 1337" bzw. "SELECT * FROM döner WHERE id = ".$integer das man um den Integer ' und ' macht denn sonst $integer = "1 AND INJECTION_CODE_EINFÜGEN"; et voila "SELECT * FROM döner WHERE id = 1 AND INJECTION_CODE_EINFÜGEN" aber mit mysql_real_escape_string
in Verbindung mit ' und ' ("SELECT * FROM döner WHERE id = '".mysql_real_escape_string($integer)."'"; ist man dann auch geschützt. Denn um Sql Code zu injecten muss man wieder ein ' sezten aber das wird durch die Tolle Funktion die ich jetzt 100 mal erwähnt hab ge-escapdded.


Fazit: Sicherheit hat viel mit dem Programmierer und seinen Kenntnissen zu tun.
PS: das nutzt mehrere Rainbowtables
finaldown97 is offline  
Old 09/25/2011, 22:38   #26
 
elite*gold: 0
Join Date: Oct 2008
Posts: 319
Received Thanks: 88
Ein Salt aus zufälligen Zeichen, der allerdings Konstant ist und sich
nicht wie bei Metin2Spieler bei jedem User ändert ist 100%ig sicher. Ich weiß nicht aber
falls es euch noch nicht aufgefallen ist kann der PHP Code nicht vom Clienten eingesehen
werden, ein Salt der einzigartig aus zufälligen Zeichen besteht ist dadurch unknackbar.


Quote:
Also behaupte nicht, dass man md5-Hashes nicht Cracken kann... Wenn er gesalzen ist, dann machste halt 2 Crackvorgänge...
Du kannst nichts Brutforcen wenn der Salt unbekannt ist, und das ist er in 99% der
Fälle da der Hacker keinen Zugriff auf die Konfigurationsdatei hat die den Salt enthält.
Hat der Hacker aber Zugriff so hat man das gleiche Sicherheitsrisiko wie wenn man
den Salt für jeden User einzeln generiert, wer sich Serverzugriff verschaffen kann,
hat auch Datenbankzugriff, alleine schon durch die SQL Konfigurationen in deinen PHP
Skripten.

Quote:
Btw: mysql_real_escape_string ist eigentlich recht sicher, nicht wie Fratyr meint.
Es geht hier um 100%ige Sicherheit und nicht um "recht sicher". Und tut mir Leid,
ich will dich wirklich nicht angreifen aber aus deinem Namen resultiere ich das du
97 geboren bist? Ich habe sicherlich einige Jahre mehr an Programmiererfahrung
auf dem Buckel, und weiß sehr wohl wie mysql_real_escape_string funktioniert.
Das mysql_real_escape_string komplett unsicher ist habe ich nebenbei nie behauptet!

Quote:
Fazit: Sicherheit hat viel mit dem Programmierer und seinen Kenntnissen zu tun.
Wiegesagt, klemm dich erst nocheinmal ein paar Jahre hinter eine Programmiersprache,
bevor du so einen Kommentar ablässt.

Quote:
Wenn man einen eigenen Salt für jedes Passwort generiert, dann sind Rainbow-Tables nutzlos. Wenn man allerdings den selben Salt für jedes Passwort benutzt, dann kann man sich einfach neue Rainbow-Tables mit dem Salt generieren.
Wie schon gesagt wie willst du dir eine Rainbotable anlegen wenn der Salt doch
unbekannt ist? Sollange du nicht "hallo" als Salt verwendest, bleibe ich bei meiner
Meinung, und das ist Fakt das Rainbowtables nutzlos sind. Erforderlich dafür ist nur
ein einzigartiger Salt.

Quote:
Aus dem Grund sollte man auch nicht überall den selben Salt verwenden, ganz egal wie lang er ist.
Siehe oben, diese Aussage ist komplett falsch.

Um es nocheinmal zusammenzufassen da ich vielleicht etwas um den heißen Brei
geredet habe:
Ein Salt aus sinnlos zusammengesetzten Zeichen, Zahlen und Buchstaben mit einer
gewissen Länge ist genauso schwer zu knacken wie ein Salt der für jeden User
eigen generiert wird. Und um das nocheinmal klar zustellen, es ist keine schlechte
Idee, und auch kein Fehler, ich halte es nur ganz einfach für unnötig!

Edit:
Quote:
Also behaupte nicht, dass man md5-Hashes nicht Cracken kann
Der md5 Algorythmus ist bisher ungeknackt.
Fratyr is offline  
Old 09/26/2011, 22:43   #27
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Quote:
Originally Posted by Fratyr View Post
Es geht hier um 100%ige Sicherheit und nicht um "recht sicher". Und tut mir Leid,
ich will dich wirklich nicht angreifen aber aus deinem Namen resultiere ich das du
97 geboren bist?
Bitte... BITTE schließe NIEMALS vom Alter einer Person auf deren Fähigkeiten!
Quote:
Originally Posted by Fratyr View Post
Der md5 Algorythmus ist bisher ungeknackt.
Hab ich nie behauptet, ist auch totaler Quatsch, weil man den Algorythmus nie umkehren werden kann (Hash = Unumkehrbare Verschlüsselung)...
MD5 - Wikipedia, the free encyclopedia <-- siehe hier

AAAABER:
Wir weichen hier vollkommen vom Thema ab o.O
Die Ursprungsfrage war, wie man einen Login + Regi baut, welche funktioniert...
Da mir hier auch langsam die schwachsinnigen Diskusionen aufn Sack gehn gibts jetzt mal hier die Loginfunktion, die ich in meinem Forenscript (welches ich grad schreibe und im XML-Forenscript) verwende:

einloggen.php
PHP Code:
<?php
/*
Loginscript
Made by xChex
*/
require_once("./func.php");
session_start();
//Per Formular übergebene Daten abfragen
$name $_POST['name']; //Benutzername
$pw $_POST['pw']; //Passwort
$name preg_replace("#\s{2,}#"" "$name);// Doppelte Leerzeichen im namen löschen
$pw preg_replace("#\s{2,}#"" "$pw);// Selbes mit dem Passwort
$_SESSION['name'] = $name//Benutzername zur weiterverwendung in der Session speichern
$action $_POST['action']; //Aktion abrufen

if ($action == "ausloggen"){ //Überprüfen ob ausgeloggt werden soll
    
$_SESSION['log'] = "ausgeloggt"//In der Session auf Ausloggen stellen
    
header("Location: ".$config['main']['index']); //Zurücklinken
}
elseif (
$action == "einloggen"){ //Wenn eingeloggt werden soll
    
$db = new DB;
    if (
$db->anzeigen_where("user""id""usn"$name) != 0){
             
//uid richtig
            //passwortüberprüfung -> start!
            //salt abfragen
            
$salt $db->anzeigen_where("user""salt""usn"$name);
                if (
$salt != ""){
                    
//passwort generieren
                     
$passwort md5(md5($salt).md5($pw));
                    
//passwort abfragen
                    //passwörter abgleichen
                        
if ($db->anzeigen_where("user""pw""usn"$name) == $passwort){
                                
$_SESSION['log'] = "eingeloggt"//Den Status "eingeloggt" in die Session speichern
                                
$_SESSION['fail'] = "";
                                
header("Location: ".$config['main']['index']); //Zurücklinken
                        
}
                        else{
                            
$_SESSION['fail'] = "true";
                            
header("Location: ".$config['main']['index']); //Zurücklinken
                        
}
                }
                else{
                    
$_SESSION['fail'] = "true";
                    
header("Location: ".$config['main']['index']); //Zurücklinken
                
}
        }
        else{
            
$_SESSION['fail'] = "true";
            
header("Location: ".$config['main']['index']); //Zurücklinken
        
}
}
elseif (
$action == "register"){
$salt salt();
$daten = array("usn" => $_POST['name'], "pw" => md5(md5($salt).md5($_POST['pw'])), "salt" => $salt);
$db = new DB;
if (
$db->anzeigen_where("user""id""usn"$name) == 0){
$db->schreiben_multi("user"$daten);
$_SESSION['log'] = "eingeloggt";
header("Location: ".$config['main']['index']); //Zurücklinken
}
else
{
echo 
"User existiert schon";
$form = new form;
$form->back_button();
}
}
else{ 
//In allen anderen Fällen
header("Location: ".$config['main']['index']); //Zurücklinken
}
?>
wichtiges aus der func.php
PHP Code:
<?php
$config
['db']['db'] = 'datenbank';
$config['db']['prefix'] = 'prefix_';

$config['db']['host'] = 'localhost';
$config['db']['usn'] = 'user';
$config['db']['pw'] = 'passwort';
$config['main']['index'] = 'index.php';


class 
DB{
    function 
__construct() {
    
$this->verbinden();
    }
    private function 
verbinden(){
        global 
$db$config;
        
$db mysql_connect($config['db']['host'], $config['db']['usn'], $config['db']['pw']);
            if (!
$db){
                echo 
"Verbindung zur Datenbank gescheitert!<br>";
            }
            else{
                
$this->select();
            }
    }
    private  function 
select(){
        global 
$db$config;
        
mysql_select_db($config['db']['db'], $db);
    }
    private  function 
trennen(){
        global 
$db;
        if (isset(
$db)){
            
mysql_close($db);
        }
    }
    
// Operationen
    
public  function schreiben_multi($table$array){
    global 
$config;
    
$abfrage "INSERT INTO `".mysql_real_escape_string(htmlspecialchars($config['db']['prefix'].$table))."` (".mysql_real_escape_string(htmlspecialchars(arrparser::array2fields($array))).") VALUES (".mysql_real_escape_string(htmlspecialchars(arrparser::array2values($array))).")";
    
$query mysql_query($abfrage);
        if (!
$query){
            echo 
"fail<br>";
        }
    }
    public  function 
anzeigen_where($table$field$kriterium_field$kriterium_value){
    
$abfrage "SELECT `".mysql_real_escape_string(htmlspecialchars($field))."` FROM `".mysql_real_escape_string(htmlspecialchars($config['db']['prefix'].$table))."` WHERE `".mysql_real_escape_string(htmlspecialchars($kriterium_field))."` = '".mysql_real_escape_string(htmlspecialchars($kriterium_value))."'";
    
$query mysql_query($abfrage);
    
$row mysql_fetch_row($query);
    return 
$row[0];
    }
    function 
__destruct() {
    
$this->trennen();
    echo 
"getrennt";
    }
}
class 
arrparser{
    public static function 
array2fields($array){
        
$var 0;
        
$fields_array array_keys($array);
        while (
$var count($fields_array)){
            if (
$var == 0){
                
$fields "`".$fields_array[$var]."`";
            }
            else{
                
$fields .= ", `".$fields_array[$var]."`";
            }
            ++
$var;
        }
        return 
$fields;
    }
    public static function 
array2values($array){
        
$values_array array_values($array);
        
$var 0;
        while (
$var count($array)){
            if (
$var == 0){
                
$values "'".$values_array[$var]."'";
            }
            else{
                
$values .= ", '".$values_array[$var]."'";
            }
            ++
$var;
        }
        return 
$values;
    }
    
class 
form{
    public function 
login(){
        global 
$config;
        
//einloggformular
        
if ($_SESSION['fail'] == "true"){ //Wenn Einlogg-Versuch fehl geschlagen ist
        
echo "<h4>Login fehlgeschlagen. Bitte nochmals probieren!</h4>";
        }
        else{ 
//Ansonsten
        
echo "<h4>Bitte loggen Sie sich ein</h4>";
        }
        echo 
"<form action=\"einloggen.php\" method=\"POST\">";
        echo 
"<input type=\"hidden\" name=\"action\" value=\"einloggen\" />"//Einlogg-Aktion auswählen
        
echo "<table class=\"main_table\" align=\"center\">";
        echo 
"<tr><td width=\"150\">Foren-Username:</td>";
        echo 
"<td colspan=\"2\" width=\"300\"><input type=\"text\" name=\"name\" size=\"40\" maxlength=\"50\"/></td>"//Benutzername
        
echo "</tr><tr>";
        echo 
"<td width=\"150\">Foren-Password:</td>";
        echo 
"<td colspan=\"2\" width=\"300\"><input type=\"password\" name=\"pw\" size=\"40\" /></td>"//Passwort
        
echo "</tr><tr>";
        echo 
"</table>";
        echo 
"<input type=\"submit\" value=\"Einloggen\" />"//Einloggen
        
echo "</form>";
        echo 
"<form action=\"".$config['main']['index']."\" method=\"POST\">";
        echo 
"<input type=\"hidden\" name=\"action\" value=\"registrieren\" />";
        echo 
"<input type=\"submit\" value=\"Registrieren\" />";
        echo 
"</form>";
    }
    public function 
register(){
        echo 
"<form action=\"einloggen.php\" method=\"POST\">";
        echo 
"<input type=\"hidden\" name=\"action\" value=\"register\" />"//Registrations-Aktion auswählen
        
echo "<table class=\"main_table\" align=\"center\">";
        echo 
"<tr><td width=\"150\">Foren-Username:</td>";
        echo 
"<td colspan=\"2\" width=\"300\"><input type=\"text\" name=\"name\" size=\"40\" maxlength=\"50\"/></td>"//Benutzername
        
echo "</tr><tr>";
        echo 
"<td width=\"150\">Foren-Password:</td>";
        echo 
"<td colspan=\"2\" width=\"300\"><input type=\"password\" name=\"pw\" size=\"40\" /></td>"//Passwort
        
echo "</tr><tr>";
        echo 
"</table>";
        echo 
"<input type=\"submit\" value=\"Registrieren\" />"//Registrieren
        
echo "</form>";
    }
    public function 
logswitch(){
        
session_start();
        if (
$_SESSION['log'] == "eingeloggt"){
            
$this->logout();
        }
        else{
            
$this->formular();
        }
    }     
    public function 
logout(){
    
//Auslogg-Button
        
echo "<form action=\"einloggen.php\" method=\"POST\">";
        echo 
"<input type=\"hidden\" name=\"action\" value=\"ausloggen\" />"//Auslogg-Aktion auswählen
        
echo "<td colspan=\"2\" align=\"left\"><input type=\"submit\" name=\"upload\" value=\"Ausloggen\" class=\"button\" /></td>"//Ausloggen
        
echo "</form>";
    }
    public function 
back_button(){
        
// Zurück-Button
        
echo "<form action=\"\" method=\"post\">";
        echo 
"<input type=\"hidden\" name=\"action\" value=\"back\">";
        echo 
"<p><input type=\"submit\" value=\"Zurück\"></p>";
        echo 
"</form>";
}
}

function 
salt($length="8")
{
    
$set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
    
$str '';

    for(
$i 1$i <= $length; ++$i)
    {
        
$str .= $set[mt_rand(0count($set)-1)];
    }

    return 
$str;
}

function 
clean(){
ob_end_clean();
ob_start();
}
?>
index.php:
PHP Code:
<?php
require_once "./func.php"//funktionsdatei includieren
session_start();
ob_start();
if (isset(
$_SESSION['log'])){
    if (
$_SESSION['log'] == "eingeloggt"){
        
//tue was getan werden soll, wenn eingeloggt ist
    
}
    else{
        
$form = new form;
        
$form->login();
        if (isset(
$_POST['action'])){
            if (
$_POST['action'] == "registrieren"){
                
clean();
                
$form->register();
            }
        }
    }
}
else{
        
$form = new form;
        
$form->login();
        if (isset(
$_POST['action'])){
            if (
$_POST['action'] == "registrieren"){
                
clean();
                
$form->register();
            }
        }
    }
?>
Bitte nicht über die überflüssigen Klassen etc wundern, sind nur die wichtigsten Funktionen aus den teilweise gigantischen Klassen rauskopiert und aufs wesentliche gekürtzt....
Außerdem verwende ich im Orginalscript noch eine 4. Datei Namens config.php in der ich das Array $config definiere... die Datei wird nur in die func.php includiert...
nuja viel Spaß damit, Source mag teilweise komisch Kommentiert sein, hab die Kommentare nur schnell reingehaun (und teilweise sind noch alte drin, die garnichtmehr stimmen )

€dit: kannst selber anpassen, alles kau ich auch ned vor... Devnotes hab ich mal rausgenommen, da das Script getestet ist, brauchste die nimmer
Che is offline  
Old 09/26/2011, 23:53   #28
 
elite*gold: 0
Join Date: Oct 2008
Posts: 319
Received Thanks: 88
Quote:
Originally Posted by 〤Che〤 View Post
Bitte... BITTE schließe NIEMALS vom Alter einer Person auf deren Fähigkeiten!

Hab ich nie behauptet, ist auch totaler Quatsch, weil man den Algorythmus nie umkehren werden kann (Hash = Unumkehrbare Verschlüsselung)...
MD5 - Wikipedia, the free encyclopedia <-- siehe hier
Doch doch, das kommt aufs Alter an, da man mit 14 (1997) noch garnicht in
der Lage ist genug Programmiererfahrung mitzubringen, esseiden er hat im
Alter von 7 damit angefangen, was ich doch stark bezweifle.

Nich böse gemeint, aber ihr macht es mir wirklich einfach klug zu scheißen
der SHA1 Algorythmus wurde geknackt, md4 glaube ich auch.


Noch was zu deinem Code, Deutsch und Englisch gemischt ist ein No-Go
beim Programmieren, entscheide dich für eines der beiden!

PHP Code:
...
    
// Operationen
    
public  function schreiben_multi($table$array){
    global 
$config;
    
$abfrage "INSERT INTO `".mysql_real_escape_string(htmlspecialchars($config['db']['prefix'].$table))."` (".mysql_real_escape_string(htmlspecialchars(arrparser::array2fields($array))).") VALUES (".mysql_real_escape_string(htmlspecialchars(arrparser::array2values($array))).")";
    
$query mysql_query($abfrage);
        if (!
$query){
            echo 
"fail<br>";
        }
    }
... 
srsly? Das kann doch nich dein Ernst sein oder? Du scheinst den Sinn der
OOP nicht ganz verstanden zu haben, sonst würdest du deine Klassen nicht
voller HTML packen. Wieso sind deine "arrparser" statisch? Weils cool
aussieht?

Ihr (oder du) habt/hast das grundlegende Prinzip, und wie man Klassen
wirklich verwendet noch nicht wirklich verstanden, in dem Fall von deinem
Code wäre es sogar fast noch klüger prozeduralen Code zu verwenden,
da deine Klassen noch nicht wirklich einen Sinn machen, noch einem Zweck
dienen, aber das wird schon mit der Zeit, ich frag mich nur manchmal wieso
mich Leute verbessern oder über PHP/JS "aufklären" wollen, wenn sie doch
offensichtlich die Sprache (noch) nicht beherrschen? Ist nicht böse gemeint,
aber nurmal Fakt, Übung macht nicht nur den Meister, sondern auch
(Praxis)Erfahrung, und die habt ihr offensichtlich alle noch nicht!
Fratyr is offline  
Old 09/27/2011, 13:30   #29
 
Che's Avatar
 
elite*gold: 120
Join Date: Aug 2010
Posts: 7,448
Received Thanks: 2,756
Quote:
Originally Posted by Fratyr View Post
Doch doch, das kommt aufs Alter an, da man mit 14 (1997) noch garnicht in
der Lage ist genug Programmiererfahrung mitzubringen, esseiden er hat im
Alter von 7 damit angefangen, was ich doch stark bezweifle.

Nich böse gemeint, aber ihr macht es mir wirklich einfach klug zu scheißen
der SHA1 Algorythmus wurde geknackt, md4 glaube ich auch.


Noch was zu deinem Code, Deutsch und Englisch gemischt ist ein No-Go
beim Programmieren, entscheide dich für eines der beiden!

PHP Code:
...
    
// Operationen
    
public  function schreiben_multi($table$array){
    global 
$config;
    
$abfrage "INSERT INTO `".mysql_real_escape_string(htmlspecialchars($config['db']['prefix'].$table))."` (".mysql_real_escape_string(htmlspecialchars(arrparser::array2fields($array))).") VALUES (".mysql_real_escape_string(htmlspecialchars(arrparser::array2values($array))).")";
    
$query mysql_query($abfrage);
        if (!
$query){
            echo 
"fail<br>";
        }
    }
... 
srsly? Das kann doch nich dein Ernst sein oder? Du scheinst den Sinn der
OOP nicht ganz verstanden zu haben, sonst würdest du deine Klassen nicht
voller HTML packen. Wieso sind deine "arrparser" statisch? Weils cool
aussieht?

Ihr (oder du) habt/hast das grundlegende Prinzip, und wie man Klassen
wirklich verwendet noch nicht wirklich verstanden, in dem Fall von deinem
Code wäre es sogar fast noch klüger prozeduralen Code zu verwenden,
da deine Klassen noch nicht wirklich einen Sinn machen, noch einem Zweck
dienen, aber das wird schon mit der Zeit, ich frag mich nur manchmal wieso
mich Leute verbessern oder über PHP/JS "aufklären" wollen, wenn sie doch
offensichtlich die Sprache (noch) nicht beherrschen? Ist nicht böse gemeint,
aber nurmal Fakt, Übung macht nicht nur den Meister, sondern auch
(Praxis)Erfahrung, und die habt ihr offensichtlich alle noch nicht!
Jo also mit dem Mischen von Deutsch und Englisch haste vollkommen recht, da hab ich als ich das geschrieben hab noch nicht so drauf geachtet...
Als ich das kleine Script geschrieben hab, hab ich grade erst mit PHP angefangen (ist ca n Monat her )... Da wusst ich einiges noch nicht...
Natürlich kann man mit Templates arbeiten, dann wirds übersichtlicher... Natürlich kann ich meinen HTML-Code außerhalb des PHP-Codes schreiben
PHP Code:
<?php
$test 
1;
if (
$test == 1){
?>
<form>
<input type="text" value="ich bin eine textbox">
</form>
<?php 
}
else
{
?>
<form>
<input type="password" value="mich kann man nicht lesen">
</form>
<?php 

?>
ist mir klar, aber damals wusste ich sowas noch nicht...

Und warum meine Array-Funktionen statisch sind? Naja weil dann der Aufruf kürzer ist...
nicht statisch:
PHP Code:
 $arrparser = new arrparser;
$arrparser->array2values($array); 
statisch:
PHP Code:
 arrparser::array2values($array); 
oder spricht irgendwas gegen meine faulheit?

Zu dem Hashing-Zeug: Kann ich nit viel dazu sagen, kenn mich jetzt da nicht sooooo toll aus, ich bin jedoch der ansicht, dass man Hashes nicht umkehren kann... Verschlüsselung =/= Hash

Nebenbei: Anstatt hier nur andere zu kritisieren, könntest du ja auch mal zeigen, wie du es machen würdest....
Che is offline  
Old 09/27/2011, 14:30   #30
 
elite*gold: 6
Join Date: Mar 2010
Posts: 416
Received Thanks: 221
Wo wir schon dabei sind, ich habe recherchiert, mysql_real_escape_string ist garnicht so unsicher wie du behauptest. Ich denke bevor du hier so ein "Müll" verbreitest solltest du erstmal prüfen ob du recht hast. Sollte ich mich irren und du hast Recht und sogar 'nen Beweis dafür, dann entschuldige ich mich.
finaldown97 is offline  
Thanks
2 Users
Reply


Similar Threads Similar Threads
Regi Hash Verschlüsselung HELP!!
05/22/2010 - Metin2 Private Server - 5 Replies
Close Pls hat sich erledigt =)
Metin2 Verschlüsselung für Regi Page??
05/21/2010 - Metin2 Private Server - 5 Replies
Hey da ich ja in meinem anderen thread meine BETA Phase meiner Registrations Page gestartet habe brauche ich noch die verschlüsselung die Metin2 für die Authenfizierung des servers benutzt weil finden tuhe ich sie nirgendswo SHA1, MD5, Base64 und mysql_escape_string habe ich schon alles versucht aber keines davon erstellt den Hash Code "*00A51F3F48415C7D4E8908980D443C29C69B60C9&qu ot; beim erstellen auf meiner Regi Page mit dem Passwort 12345 würde mich freuen wenn ihr mir helfen könntet MFG...
PFlyff-Server Passwort-Verschlüsselung. Welcher Art?
02/12/2010 - Flyff Private Server - 4 Replies
Hallo alle miteinander. Erstmal großes Lob an Euer Forum, ohne es hätte ich bestimt nie meinen eigenen PServer gemacht ;). Zum Problem das mich quält: Ich arbeite grade an einem Webinterface zur Charerstellung/Registrierung/Verwaltung, also wo man auch Items dem Char ins Inventory packen kann, ohne immer alles mühsam in die DB einzutragen oder auch die Monsterdrops bearbeiten kann ohne Zusatzprogramme usw... Nun habe ich das Problem, das Flyff ja einen Verschlüsselungsmechanismus...



All times are GMT +1. The time now is 05:25.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.