[MySQL/PHP] änderung wird nicht richtig übernommen

IamTheDj

Programmierer
4 Oktober 2006
1.738
105
Hallo!

Also ich hab auf meiner Seite folgendes Problem:

Wenn der User sein Profil updaten will, schreibt er in die Tabelle des Passwort immer irgendein mehrstelliges Passwort was der User gar nicht angegeben hat, bzw. er holt auch aus der Datenbank irgendein mehrstelliges Passwort heraus, wenn ich das aktuelle Passwort anzeigen lassen will (hab ich nur getestet).

Hier die PHP Datei:

PHP:
if ($action == "profil")
{
if (empty($B1))
{
eval ("\$mess = \"".gettemplate("ander")."\";");
}
else
{
if ($D5 == "Ja" )
{
$D5 = 1;
}
else
{
$D5 = 0;
}
$query = "UPDATE daten set pw='$T6', email='$emailupd', vname='$T1', nname='$T2', strasse='$T3', plz='$T4', ort='$T5', hp='$hp' where nick='$nick'";
mysql_query($query) or die ("Fehler: ".mysql_error());
$mess = "Daten erfolgreich übernommen!";
}

Und hier die HTML-Template:

HTML:
<form method='POST' action='user.php?action=profil'>
<center>
<table border='0' cellpadding='0' cellspacing='0' width='100%' id='AutoNumber1' align=center height="186">
  <tr>
    <td width='36%' height="19"> </td>
    <td width='64%' height="19"> </td>
  </tr>
   <tr>
    <td width='36%' align='right' height="16"><font face="Verdana" size="2">
    Klamm ID**:  </font></td>
    <td width='64%' height="16"><font face="Verdana" size="2">$nick</font></td>
  </tr>
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">Vorname:  </font></td>
    <td width='64%' height="22"><font face="Verdana"><input type='text' name='T1' size='20' value='$vname'></font></td>
  </tr>
  <tr>
    <td width='36%' align='right' height="23"><font face="Verdana" size="2">Nachname:  </font></td>
    <td width='64%' height="23"><font face="Verdana"><input type='text' name='T2' size='20' value='$nname'></font></td>
  </tr>
 
 
 
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">
    Passwort*:  </font></td>
    <td width='64%' height="22"><font face="Verdana">
    <input name='T6' size='20' value="$pw"></font></td>
  </tr>
 
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">Emailadresse:  </font></td>
    <td width='64%' height="22"><font face="Verdana">
    <input name='emailupd' size='20' value="$email"></font></td>
  </tr>
 
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">Strasse + Nr:  </font></td>
    <td width='64%' height="22"><font face="Verdana"><input type='text' name='T3' size='20' value='$strasse'></font></td>
  </tr>
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">PLZ + Wohnort:  </font></td>
    <td width='64%' height="22"><font face="Verdana"><input type='text' name='T4' size='5' value='$plz'><font size="2"> 
    </font> <input type='text' name='T5' size='20' value='$ort'></font></td>
  </tr>
  <tr>
    <td width='36%' align='right' height="22"><font face="Verdana" size="2">
    Homepage:  </font></td>
    <td width='64%' height="22"><font face="Verdana"> 
    <input type='text' name='hp' size='20' value='$hp'></font></td>
  </tr>   
  </table>
  <p><font face="Verdana">
  <input type='submit' value='Speichern' name='B1'></font></p>
  </form>
 
Deaktivier mal register_globals und frag nochmal 8O :ugly:
$nick ist nicht gesetzt.

Btw. voll cool der Code. Wenn der tatsächlich so im Einsatz is, kann man in der Datenbank beliebig fummeln 8)
 
Sorry, aber wenn ich so einen Code sehe, könnte ich das k**zen bekommen...

Hoffe du bist noch in deinen Anfängen des Programmierens :roll: .


Wie theHacker teilweise sagte:

  1. Was willst du machen, wenn du deinen Hoster z.B. wechselst und bei dem neuen register_globals aus ist? Da bleibt dir nur die Wahl, alles neu zu schreiben.
    => $_GET bzw. $_POST benutzen!
  2. Einrücken! Wenn man jemand anderes an einem großen Code (dieser ist noch recht klein) etwas editieren will muss der ja suchen, was gehört zu welchem else etc.
  3. 3. Injections ! Dein Code ist offen wie sonst was! Alle Usereingaben können schädlich sein! Denk dran. Stell dir mal vor jemand gibt nun in dem Feld 'hp' folgendes ein: ' WHERE id=1/*
    Nun wird aus deinem Query folgendes: UPDATE daten set pw='$T6', email='$emailupd', vname='$T1', nname='$T2', strasse='$T3', plz='$T4', ort='$T5', hp='' WHERE id=1/*' where nick='$nick'
    mysql_real_escape_string() benutzen!
    [*]und 4. Passwörter verschlüsseln! Ich (und ich denke so gut wie jeder andere auch) mag es persönlich nicht, wenn mein Passwort unverschlüsselt in der Datenbank gespeichert wird. Sollte doch ein unbefugter Zugriff zur Datenbank bekommen, müsste er erst einmal (per BruteForce z.B.) das Passwort "entschlüsseln".
    => md5() nutzen


Anmerkung: /* ist in MySQL ein Kommentar ;) Dein 'where' danach wird also nicht beachtet.


PS: Ich hoffe du verträgst Kritik und nimm es mir den ersten Satz nicht so übel, nur dein Code ist nicht der beste.
 
Nur mal so als kleine Anmerkung:

Diesen PHP Code hab ich nicht geschrieben sondern in einem Loseshop ein Script gekauft.

Weiters habe ich nicht die ganze PHP Datei einefügt, da dies die user.php wäre und alles eben mit user.php?action= gemacht wird und da wär díe etwas lang ;)

Edit: Das mit dem Passwort verschlüsseln ist leider so beim kauf von dem Script gewesen, und da ich nicht wirklich gut Programmieren kann ist das ein wenig scher für mich zu verändern.
 
Schade das mir ansonsten hier keiner helfen kann, außer ein paar nörgler

Sry wenn du zu blöd bist hilfe zu erkennen dann hast du halt pech. Das was du gepostetet hast ist eine tickende Zeitbombe und vorallendingen in der Hand von jemanden der keine ahnung hat. Wenn dein Hoster nicht ausversehen magic quotes laufen hat ist das was du gepostet hast absolut unsicher... jeder der nur minimal ahnung von SQL und SQL-injections hat könnte hier scheiße bauen.

PS: das Problem versteckt sich nicht in dem Code den du gepostet hast... dafür einige Grundlegendeprobleme. (*edit* ausser das mit $nick ist wirklich der Fehler, das wäre aber wirklich zu lolig... ich geh mal davon aus das der aussner Session kommt)
 
Diesen PHP Code hab ich nicht geschrieben sondern in einem Loseshop ein Script gekauft.

Man hört und sieht ja nun wirklich viel Mist in vielen Losescripts. Wenn das Ding wirklich so im Einsatz ist, würde ich netterweise mich echt an den Coder bzw. Verkäufer wenden, weil es in der Form zu vertreiben wäre schon echt dreist. Das sind keine Angriff gegen dich, die hier gepostet werden, sondern Tipps, weil sonst an ein halbwegs sicheres produktives Verwenden nicht zu denken wäre. Und gerade wenn es um Geld, Lose oder sonst etwas geht, in dem man Verlust machen kann, ist Sicherheit wohl die oberste Priorität.