Neuigkeiten:

still alive...

Hauptmenü

logincheck.inc.php verschönern

Begonnen von k00ni, 29. August 2007, 18:23:33

Vorheriges Thema - Nächstes Thema

Seit wann arbeitest du denn mit mysql_real_escape_string? Ich denke man kann direkt in SQL-Statements keinen Schadcode reinbauen [biggrins]  ? (So alla: $test = \" \'; drop_database () #\") [/quote]
Das Hinzufügen eines zweiten Befehls funktioniert bei mysql_query() tatsächlich nicht. Jedoch alle andere Arten von SQL-Injektion.

@A7: Wenn du bedenken hast deine Mail Adresse beim Login zu übermitteln: Ich rate dir, dann lösche alle deine Internetkonten, formatiere deine Festplatte, wirf den Rechner in den See und mach alles nur noch per Papier!
 /uploads/emoticons/icon_e_wink.gif.c059000ae48ff64afa53be0962c021f2.gif\" alt=\":wink:\" />
Es geht nicht ums Übermitteln sondern ums jedesmal beim Login einzugeben, das ist ein Unterschied, Powie!!! :R:

otti_mania


Original von Powie
Mal abgesehen davon das es rechtlich doch stark bedenklich ist wenn mehrere Personen die gleiche E-Mail Adresse nutzen![/quote]
das ist eine Lachnumer......
E-Mails selbst sind meiner Meinung nach rechtlich sowas von bedenklich........... Das ganze System dahinter ist aus der Steinzeit., oder würdest du jemanden glauben das er er ist, nur weil die Mail Adresse nach ihm aussieht.  [/uploads/emoticons/icon_e_surprised.gif.a005678239f11b45b64b526b2c82e9a1.gif\" alt=\":o\" />]
..... hat ein Mitarbeiter hier in der Firma auch geglaubt das das Mailsystem so schön und super ist. Und es wäre soooo wichtig niemanden an seinen PC zu lassen bla  bla....
Hab ihm dann mal demonstriert wie man in Sekunden eine Mail von ihm an jemand anderen schickt ohne sein zutun  :gaga:
[/quote]
Ja du kannst leicht eine E-Mail verändern wenn du sendest das ist war allerdings versuch mal ne E-Mail zu erhalten die nicht dir gehört!
Und es ist immer möglich bei einer zB über einen PHP Mailer geschickete E-Mail zurück zu verfolgen im Mailhader steht ja die IP!
 
@Statler:
Um es kurz zu erklären und an Hand eines Beispiels was garnicht so unrealistisch ist:
Am Beisliel von A7 eine Familie nutzt gemainsahm die E-Mailadresse \"karl.schmit@gmwebx.de\"
gehen wir davon aus es handelt sich um eine Familie mit 2 Kindern und die mutter kann mit dem Thema nix anfangen
nun chattet die tochter 12 in einem chat mit einem jungen 13 dann bekommen das die eltern des jungen mit und wundern sich das das mädchen karl schmitz als e-mail adresse hat und recherchieren das der karl schmitz nicht 12 ist sondern 42 und erstatten anzeige!
die staatsanwaldschaft wird ihm sicher direkt glauben das es seine 12 jährige tochter war und nicht er!
Anderes beispiel die tochter kauft ein mit seiner e-mail adresse!
Ich wollte also damit nur sagen das es zu problematiken kommen kann wo der vater in schwierigkeiten kommt!

Gruß Otti




#########WICHTIG###########


if (IQ > Raum - °C) echo $post


   else exit ();


##########################




http://www.ottimania.de\" rel=\"external nofollow\">http://www.ottimania.de/banner1.gif\" alt=\"banner1.gif\">


k00ni

Es geht nicht ums Übermitteln sondern ums jedesmal beim Login einzugeben, das ist ein Unterschied, Powie!!!  :R:[/quote]
Verstehe das Problem nicht. Du kannst das Feature \"Login speichern\" nutzen, was wir extra für sowas zur Verfügung stellen (!) (Erspart die ständige Neueingabe)
Denkst du etwa an Man-in-the-middle-Angriffe, wo jemand deine E-Mail-Adresse abgefängt? Oder an parallel laufende Skripte, die die Datenbanken der SPAM-Verschicker aktualisieren und füttern? Keine Angst, deine E-Mail, sobald irgendwo mal eingegeben oder angezeigt, landet so oder so in den SPAM-Verteilern, dass ist traurige Wahrheit.
 
Grüße

Wenn du bedenken hast deine Mail Adresse beim Login zu übermitteln: Ich rate dir, dann lösche alle deine Internetkonten, formatiere deine Festplatte, wirf den Rechner in den See und mach alles nur noch per Papier![/quote]
Anstatt polemisch zu werden könnte man es auch sachlich betrachten: A7 hat gar nicht so unrecht, wenn er kritisiert, dass Anmeldedaten unverschlüsselt übergeben werden. Auch wenn sich der Schaden relativ gering hält, wenn eine Forenidentität gestohlen wird, so könnte man doch durch einfache Transportverschlüsselung Abhilfe schaffen. Dies liegt allerdings in den Händen der Betreiber. Von Powie erwarte ich eher, dass er explizit in der Anleitung schreibt, dass die Daten unverschlüsselt übertragen werden und dass dies keine gute Idee ist.
nun chattet die tochter 12 in einem chat mit einem jungen 13 dann bekommen das die eltern des jungen mit und wundern sich das das mädchen karl schmitz als e-mail adresse hat und recherchieren das der karl schmitz nicht 12 ist sondern 42 und erstatten anzeige!
die staatsanwaldschaft wird ihm sicher direkt glauben das es seine 12 jährige tochter war und nicht er!
[/quote]
Davon abgesehen, dass es völlig egal ist, was die Staatsanwaltschaft glaubt, ist es in der Realität eben doch so, dass E-Mail-Adressen von mehreren Nutzern gleichzeitig verwendet werden. Das ist weder illegal, noch irgendwie verdächtig.
Natürlich steht es dir frei, festzulegen, dass E-Mail-Adressen bei deiner Software unique sein müssen. Aber behaupte bitte nicht, dass das unüblich oder illegal sei. Das stimmt nämlich nicht.

k00ni

[...] so könnte man doch durch einfache Transportverschlüsselung Abhilfe schaffen[/quote]
Beschreib mal bitte wie bzw. nenne ein paar Stichwörter dazu. Ich stelle mir das nämlich grad sehr schwierig vor, die eingegeben Daten vom Formular bis in die Datenbankabfrage zu verschlüsseln. Denn man trägt ja die Daten ein, klickt auf Einloggen, die Daten kommen zur PHP-Datei, wo sie verarbeitet werden. Wo hat an da die Möglichkeit einzugreifen mit PHP? Einzig per AJAX könnte man dass vielleicht machen, indem man vielleicht eine direkte Abfrage zur Verschlüsselung sendet, nachdem der User eine E-Mail angetragen hat.... aber ob das wiklich so leicht geht und den Aufwand rechtfertig.  :ugly:
Davon abgesehen, dass es völlig egal ist, was die Staatsanwaltschaft glaubt, ist es in der Realität eben doch so, dass E-Mail-Adressen von mehreren Nutzern gleichzeitig verwendet werden. Das ist weder illegal, noch irgendwie verdächtig.[/quote]
Meiner Meinung nach ist es aber doch schon so, dass eine E-Mail (wenn auch nur grob) einer bestimmten Person zugeordnet werden kann. Die Rechtslage ist hier sehr ungewiss und schwammig, aber ich denke, dass eine \"Tat\" + eine E-Mail-Adresse bereits für die Staatsanwaltschaft ein Indiz darstellt und ein Grund für eine Strafverfolgung sein kann; wie das dann ausgeht sei mal dahin gestellt.
 
Grüße

Beschreib mal bitte wie bzw. nenne ein paar Stichwörter dazu. Ich stelle mir das nämlich grad sehr schwierig vor, die eingegeben Daten vom Formular bis in die Datenbankabfrage zu verschlüsseln. Denn man trägt ja die Daten ein, klickt auf Einloggen, die Daten kommen zur PHP-Datei, wo sie verarbeitet werden. Wo hat an da die Möglichkeit einzugreifen mit PHP?[/quote]
TLS/SSL heißt das Zauberwort. PHP muss da gar nix machen.
Meiner Meinung nach ist es aber doch schon so, dass eine E-Mail (wenn auch nur grob) einer bestimmten Person zugeordnet werden kann.[/quote]
Nein. Eine E-Mail-Adresse kann einem Account bei einem Email Service Provider (wie web.de oder gmx.de) zugeordnet werden. Dieser Account kann dann einer oder mehreren Personen zugeordnet sein.
Die Rechtslage ist hier sehr ungewiss und schwammig[/quote]
Ist sie nicht.
aber ich denke, dass eine \"Tat\" + eine E-Mail-Adresse bereits für die Staatsanwaltschaft ein Indiz darstellt und ein Grund für eine Strafverfolgung sein kann; wie das dann ausgeht sei mal dahin gestellt.[/quote]
Indizien für Schuld und Unschuld werden innerhalb der Strafverfolgung erarbeitet. Übrigens beide von der Staatsanwaltschaft. Die Würdigung der Beweismittel obliegt dann einem Gericht. Dort muss dann die Staatsanwaltschaft beweisen, dass die E-Mail-Adresse nur von einer Person benutzt werden konnte; nicht der Beschuldigte, dass ein anderer diese Adresse auch verwendet hat.

otti_mania


Original von Statler Indizien für Schuld und Unschuld werden innerhalb der Strafverfolgung erarbeitet. Übrigens beide von der Staatsanwaltschaft. Die Würdigung der Beweismittel obliegt dann einem Gericht. Dort muss dann die Staatsanwaltschaft beweisen, dass die E-Mail-Adresse nur von einer Person benutzt werden konnte; nicht der Beschuldigte, dass ein anderer diese Adresse auch verwendet hat.
[/quote]
Das ist fasst richtig nur das bei einem Service Provider NIE Mehrere Personen einer E-Mail Adresse zugeordnet sind!
Egal welcher Service Prowider es ist er hat einen Account und die damit verbundene E-Mail Adresse immer einer Eindeutiggen, NATÜRLICHEN Person zugeordnet!
 
Im weiteren deine Idee mit TSL/SSL ist ja nicht neu aber für die meissten nicht machbar weil SSL Zertifikate meiner meinung nach sehr teuer sind das günstigste was ich kenne kostet 69€ für eine Domain

Gruß Otti




#########WICHTIG###########


if (IQ > Raum - °C) echo $post


   else exit ();


##########################




http://www.ottimania.de\" rel=\"external nofollow\">http://www.ottimania.de/banner1.gif\" alt=\"banner1.gif\">


Powie

TSL/SSL -> wer es \"wirklich\" braucht, dem werden die paar € dafür egal sein.
Trotzdem, der ganze Aufwand lohnt nicht, das E-Mail System des Internet ist einfach bullshit, da nutzen auch \"Signaturen\" nichts wie sie normalerweise für Gerschäftspost und viele Dinge gefordert sind. Das grösste Problem dabei ist einfach das es für eine Ottonormalverbraucher in keiner Weise zu durchschauen ist was er mit dem ganzen Techno Zeug machen soll. Und daher kommen dann Probleme wie Phishing und Co....

Das ist fasst richtig nur das bei einem Service Provider NIE Mehrere Personen einer E-Mail Adresse zugeordnet sind![/quote]
Stimmt nicht. Ich hatte mal einen T-Online-Account, der auf meine WG eingetragen war und nicht auf eine bestimmte Person. Die Mitbewohner der WG bilden dann eine Bruchteilsgemeinschaft.
Egal welcher Service Prowider es ist er hat einen Account und die damit verbundene E-Mail Adresse immer einer Eindeutiggen, NATÜRLICHEN Person zugeordnet![/quote]
Dies muss aber nicht immer eine natürliche Person sein, sondern kann auch eine juristische Person sein. Diese sind üblicherweise voll geschäftsfähig.
Im weiteren deine Idee mit TSL/SSL ist ja nicht neu aber für die meissten nicht machbar weil SSL Zertifikate meiner meinung nach sehr teuer sind das günstigste was ich kenne kostet 69€ für eine Domain[/quote]
Diese gibt es selbstsigniert oder von CACert bereits kostenlos, oder kommerziell von Comodo bereits ab 19 EUR pro Jahr.
TSL/SSL -> wer es \"wirklich\" braucht, dem werden die paar € dafür egal sein. [/quote]
Eben.
Trotzdem, der ganze Aufwand lohnt nicht, das E-Mail System des Internet ist einfach bullshit, da nutzen auch \"Signaturen\" nichts wie sie normalerweise für Gerschäftspost und viele Dinge gefordert sind. Das grösste Problem dabei ist einfach das es für eine Ottonormalverbraucher in keiner Weise zu durchschauen ist was er mit dem ganzen Techno Zeug machen soll.[/quote]
Schlechte Benutzbarkeit von Kryptografie bedeutet aber nicht, dass der gesamte Dienst \"Internet Mail\" nichts taugt. Im Gegenteil, der Dienst ist einer der erfolgreichsten im Internet. Du vermengst hier zwei Sachen, die prinzipiell nichts miteinander zu tun haben. Um es nochmal zu sagen: All deine Kritik trifft auch auf Briefpost zu.

k00ni

Ich habe mich mal daran gemacht und die login.inc.php und logincheck.inc.php zusammen zuführen. Die login.inc.php muss man extra lassen, da sie ggf. ein Login-Formular einbindet. Packt man das nun in die logincheck.inc.php, so werden Gäste immer mit einem Login konfrontiert, deshalb würde ich das getrennt lassen. Aber ich habe einige Änderungen vorgenommen, die einerseits die Übersichtlichkeit erhöhen und andererseits die Datenbankabfragen etwas minimiert.
 

 1) {
   header (\"Location: $purl_user/login.php?loginerror=1\");
        exit();
}
    $user = mysql_fetch_array($getuser);
if ( $user[\'uin\'] == \"\" ) $_SESSION[\'UIN\'] = $newuin;
else {
   $newuin = $user[\'uin\'];
   $_SESSION[\'UIN\'] = $user[\'uin\'];
}
    // User-UIN, Ablauf des Logins und Loginzeit bei dem User aktualisieren.
    $sqlbefehl  =  \"UPDATE $tab_user \" .
                  \"SET uin=\'$newuin\', expire=\'$expire\', logintime=\'\".time().\"\' \" .
                \"WHERE id = \'$user[id]\';\";
    mysql_query($sqlbefehl, $serverid);
     // Login Daten werden als Cookie gespeichert wenn erfolgreich
    if ( $_REQUEST[\'savelogin\'] == 1 ) setcookie (\"loginkey\",$newuin,time()+3600*24*60,\"/\");
}
}
 
// LOGOUT durchführen --------------------------------------------------------------------
if ( isset($_GET[\'dologout\']) AND $_GET[\'dologout\'] == 1)
{
   $sqlbefehl = \"UPDATE $tab_user \" .
               \"SET uin=\'\', expire=1 \" .
              \"WHERE uin=\'$_SESSION[uIN]\'\";
   mysql_query($sqlbefehl, $serverid);
   // Login-Cookie mit leeren Werten überschreiben.
   setcookie (\"puserid\", \"\", time()-1000);
   setcookie (\"puserpwd\", \"\", time()-1000);
   setcookie (\"loginkey\",\"\",time()-1000,\"/\");
   // Alle Sessiondaten löschen.
   session_unset();
   header(\"Location: index.php\");
   exit();
}
 
// AUTO-EINLOGGEN, wenn ein Cookie existiert. --------------------------------------------
if (isset($_COOKIE[\'loginkey\']) AND !isset($_REQUEST[\'dologout\']) AND $_SESSION[\'UIN\'] == \"\")
{
   $sqlbefehl = \"SELECT * \" .
                \"FROM $tab_user \" .
               \"WHERE uin=\'\".$loginkey.\"\'\";
   $getuser  = mysql_query($sqlbefehl, $serverid);
   if (mysql_num_rows($getuser) == 1)
   {
$user = mysql_fetch_array($getuser);
$_SESSION[\'UIN\'] = $loginkey;
       $sqlbefehl  =  \"UPDATE $tab_user \" .
                      \"SET expire=\'$expire\', logintime=\'\".time().\"\' \" .
                    \"WHERE id = \'$user[id]\'\";
       @mysql_query($sqlbefehl, $serverid);
   }
}
 
// UIN EXISTIERT -------------------------------------------------------------------------
if ($_SESSION[\'UIN\'] != \"\")
{    
   $sqlbefehl= \"SELECT * FROM $tab_user WHERE uin=\'\".$_SESSION[\'UIN\'].\"\';\";    
   $ergebnis = mysql_query($sqlbefehl, $serverid);
   if (mysql_num_rows($ergebnis) == 1)
   {
       $user = mysql_fetch_array ($ergebnis);
       $user_nickname = $user[\'nickname\'];
       $user_typ      = $user[\'usertyp\'];
       $user_grpid    = $user[\'grpid\'];
       $user_id       = $user[\'id\'];
       $user_lastlogin= $user[\'lastlogin\'];
       $user_pm       = $user[\'usepm\'];
       $user_email    = $user[\'email\'];
       $user_zps      = $user[\'setzps\'];
       // Gültigkeit des Logins nur erhöhen, wenn der User mit der UIN auch existiert.
// IP-Adresse ermitteln.
    $host=getenv(\"REMOTE_ADDR\");
    $sqlbefehl  =  \"UPDATE $tab_user \" .
                  \"SET expire=\'$expire\', ip=\'$host\' \" .
                \"WHERE uin=\'\".$_SESSION[\'UIN\'].\"\';\";
    @mysql_query($sqlbefehl, $serverid);
   }
   else {
       unset($_SESSION[\'UIN\']);
       $pf_cache_rights=0;
   }
}
 
// GAST DATEN ----------------------------------------------------------------------------
if ($user_id == 0 )
{
   if (isset($_COOKIE[\'pfguest\'][\'name\']))  $user_nickname = $_COOKIE[\'pfguest\'][\'name\'];
   if (isset($_COOKIE[\'pfguest\'][\'email\'])) $user_email = $_COOKIE[\'pfguest\'][\'email\'];
}
 
// DATEN IN SESSION speichern. -----------------------------------------------------------
//## Gyu\'s this woold be nie....
$_SESSION[\'ps_nickname\'] = $user_nickname;
$_SESSION[\'ps_email\']    = $user_email;
$_SESSION[\'ps_userid\']   = $user_id;
global $user_id;
 
// BUDDY ARRAY des Users aufbauen --------------------------------------------------------
if ( $user_id > 0 )
{
$sql = \"SELECT buddyid FROM $tab_userbuddy WHERE userid = \'$user_id\' \";
$getbuddy = mysql_query($sql,$serverid);
$userbuddylist = array();
while( $temp = mysql_fetch_array($getbuddy) ){
array_push($userbuddylist,intval($temp[\'buddyid\']));
}
}
 
?>

 
 
Man kann durch das Weglassen von
 

$getuser  = mysql_query($sqlbefehl, $serverid);

 
 
eine wiederholte Abfrage der Userdaten erreichen.
 

// Loesche abgelaufene UINs und setze Logintimes zurück
$sqlbefehl = \"UPDATE $tab_user \" .
 \"SET lastlogin=logintime,expire=0,inboard=0 \" .
 \"WHERE expire BETWEEN 1 and \".time().\';\';
mysql_query($sqlbefehl, $serverid);

 
 
Es wird bei jedem Seitenaufruf ein SQL-Statement gesendet, was abgelaufene Userkonten anpasst. Dies würde ich auslagern, da es unnötig ist, dass bei fast jedem Seitenaufruf zu tun.
 

$user[\'forum_lastlogin\'] = time();

 
 
Was hat das hier zu suchen? Das ist doch nur für das Forum oder? Ich würde dass in die config.inc.php oder pforum_main.php vom Forum einbauen, hier ist es etwas fehl am Platz.
 

$pf_cache_rights = 0; // Rechte Cache disabled

 
 
Den Rechtecache würde ich standardmäßig setzen lassen. Oder bringt das Probleme?
 

while ($user = mysql_fetch_array($getuser)) 

 
 
Habe die while-Schleife in dem Bereich  \"wenn ein Cookie existiert\" gelöscht und ein
 

$user = mysql_fetch_array($getuser);

 
 
draus gemacht. While-Schleifen würde ich nur bei mehr als einem Durchgang nehmen /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
 

if (mysql_num_rows($ergebnis) == 1) 
   {
       $user = mysql_fetch_array ($ergebnis);
       $user_nickname =$user[\'nickname\'];
       $user_typ      =$user[\'usertyp\'];
       $user_grpid    =$user[\'grpid\'];
       $user_id       =$user[\'id\'];
       $user_lastlogin=$user[\'lastlogin\'];
       $user_pm       =$user[\'usepm\'];
       $user_email    =$user[\'email\'];
       $user_zps      =$user[\'setzps\'];
   }

 
 
Diese Variablen hab ich noch nie verwendet. Werden die genutzt? Ansonsten kann man ja auch mit dem $user-Array arbeiten
 
//## Gyu\'s this woold be nie....[/quote]
Was man nicht alles findet /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" /> Was heißt denn das deutsch? xD
 

// ############ Login überprüfen
$sqlbefehl= \"Select * from $tab_user where uin=\'\".$_SESSION[\'UIN\'].\"\' And uin  \'\'\";
$ergebnis  = mysql_query($sqlbefehl, $serverid);
if (mysql_num_rows($ergebnis) != 1) {
   $pagetitle.=\" - Login\";
   require ($pdir.\"/kopf.php\");
   echo \"    
 
              $pagetitle
              Username:
              Passwort:
              Login speichern:
 

                \";
                  if ( $pset[\'access\'] != \'private\') {
                     echo \"Registrieren / \";
                  }
echo \"            Passwort vergessen
 
               \";
   require ($pdir.\"/fuss.php\");
   exit();
}

 
 
Ich denke, dass muss man in der login.inc.php lassen. Da sonst immer ein Login-Forumluar eingeblendet wird, wenn man die logincheck.inc.php einbindet. Ich würde da aber lieber eine Weiterleitung machen auf das Loginformular von pUser, da man sonst 2 Loginformular pflegen muss.
 

$zeit     = time();

 
 
Das ist scheinbar ebenfalls unnötig, da bei den SQL-Statements immer mit time () gearbeitet wird. :ugly:
 
Mehr ist mir bisher nicht aufgefallen. Was meint ihr zu den Änderungen?
 
Grüße

mahe

Wozu: mysql_real_escape_string (addslashes(....(?)

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


k00ni

Wozu nicht?  /uploads/emoticons/icon_e_surprised.gif.a8707b3f35a569cb4cfe563fc72ef78d.gif\" alt=\":-o\" /> ... Lass mich raten, die machen das Gleiche ?
 
Grüße

mahe

Nicht raten, nachlesen /uploads/emoticons/icon_e_wink.gif.3167d127940f44558fbf1ccd9b6d60a9.gif\" alt=\";-)\" />
Des weiteren nimmst du scheinbar keine Rücksicht auf magic_quotes.
Du hast dann zig \\\\\\\\\\ in der Datenbank.

http://blog.mahe.at\" rel=\"external nofollow\">http://blog.mahe.at/wp-content/uploads/2007/06/88x31_1.jpg\" alt=\"88x31_1.jpg\">


Ja, diese Signatur dient zur Werbung!


Und dass ich meine Posts wiederfinde ...


k00ni

Des weiteren nimmst du scheinbar keine Rücksicht auf magic_quotes[/quote]
Ich habe magic_quotes bisher nur aus der Ferne gesehen. Könntest ein Beispiel bringen, wo es meinem Codeschnipsel Probleme geben könnte? Weiterhin sollte ein Backslash garnicht erst in bei der Userlogingeschichte auftauchen; zumindest sollte ein Passwort + Username auch ohne auskommen. Oder meintest du was anderes?
 
Grüße

all your base are belong to us / Discord