Problem beim Daten ändern

compoundbow83

Grünschnabel
Hallo, ich hab da ein kleiner Problem,
ich hab ein Login-Bereich.

Jetzt hab ich mir was zusammengebastelt, dass ein User der sich eingeloggt hat seine
eigenen Daten ändern kann, das funktioniert auch. Nur beim Passwort hab ich ein Problem.
Wenn jemand seine Daten änder, aber nicht das passwort, dann schreibt er in die Datenbank ein md5 verschlüsseltes passwort aber nicht aus dem eigentlichen passwort sondern aus dem bereits md5 verschlüsselten.

Wie kann ich das ändern?

hier mein Code:
Code:
<html>
<head>
<meta _username="author" content="">
<title>Passwort gesch&uuml;tzer Bereich</title>
</head>
<link rel="stylesheet" type="text/css" href="format.css" >

<html> 
<head> 

</head> 

<link rel="stylesheet" type="text/css" href="format.css" >

<form action="" method="post">


<?php  

    session_start();
 
$connect_id = mysql_connect("localhost", "user","pw") or die ("Keine Verbindung moeglich");   
mysql_select_db("datenbank") or die ("Die Datenbank existiert nicht");

$_vorname = $_POST["vorname"];
$_name = $_POST["name"];
$_username = $_POST["username"];
$_passwort = $_POST["passwort"];
$_email = $_POST["email"];
$_sprache = $_POST["sprache"];
$_id = $_POST["id"];
if( isset($_POST['submit']) )
{
    echo '<font color="#FF0000">Daten geändert!</font>';
    foreach ($_id as $key => $id){
        echo "";
        $aendern = "UPDATE user Set _vorname='$_vorname[$id]', _name='$_name[$id]', _username='$_username[$id]', _passwort=md5('$passwort[$id]'), _sprache='$_sprache[$id]', _email='$_email[$id]' WHERE _id = $id;";  
        $update = mysql_query($aendern) or die(mysql_error());
    }
}
?>

<form action="" method="post">
<?php   
$abfrage = "SELECT * from user WHERE _id = '". mysql_real_escape_string($_SESSION['id']) ."' ";
$result = mysql_query($abfrage,$connect_id);
echo "<table>";
while ($row = mysql_fetch_array ($result)) 
{
$_id = $row["_id"];
$_vorname = $row["_vorname"];
$_name = $row["_name"];
$_username = $row["_username"];
$_passwort = $row["_passwort"];
$_email = $row["_email"];
$_sprache = $row["_sprache"];


echo <<<ABC



	<tr>
		<td><b>Vorname</b></td>
		<td><b>Nachname</b></td>
		<td><b>Username</b></td>
		<td><b>Passwort</b></td>
		<td><b>Email</b></td>
		<td><b>Sprache</b></td>


	</tr>

<tr>
    <td><input type="text" name="vorname[$_id]" size="12" value="$_vorname"></td>
    <td><input type="text" name="name[$_id]" size="12" value="$_name"></td>
    <td><input type="text" name="username[$_id]" size="20" value="$_username"></td>
    <td><input type="password" name="passwort[$_id]" size="10" value="$_passwort"></td>
    <td><input type="text" name="email[$_id]" size="30" value="$_email"></td>
    <td><input type="radio" name="sprache[$_id]" value="deutsch" checked> deutsch<br>
        <input type="radio" name="sprache[$_id]" value="englisch"> english<br>
        <input type="radio" name="sprache[$_id]" value="französisch"> français</TD>



    <input type="hidden" name="id[]" value="$_id"></td>
</tr>
ABC;
}
?>
</table>

<input type="submit" name="submit" value="Daten ändern"></form>


<? 
mysql_close($connect_id);  
?>


<br><br><br><br>
<hr align="left" height="10" color="#FF0000" noshande>



<TABLE>
<TR>
 <TD>Menü: </TD>
 <TD><a href="http://compoundbow83.co.funpic.de/passwortschutz/geheim.php" target="rechts">Loginbereich</a> </TD>
 <TD> </TD> <TD> </TD> <TD> </TD> <TD> </TD>
 <TD> </TD>
</TR>
</TABLE>
 
Sorry hatte vergessen zu sagen, dass ich so gut wie keine erfahrungen mit php habe.
Ich hab mich schon rumgequält des überhaupt so hinzubekommen.

Kann mir des viellt genauer erklären, was ich wo machen muss?
 
@compoundbow83

Du solltest dich erst einmal mit PHP dich beschäftigen und überhaupt verstehen wie alles aufgebaut ist und vll findest du sogar Sicherheitslücken die du dann fixen könntest...
Einer der einfach Scripts vom Internet ladet und gerad nur weiß wie ein Forum funktioniert, sollte die finger von Scripts lassen....

MfG
KD3
 
Prüfe einfach den Wert der $_POST['passwort']-Variable. Ist dieser ungleich einer leeren Zeichenkette, wird das Passwort geändert.

Zusätzlich solltest du dich wie bereits erwähnt noch mit allgemeinen Sicherheitsrisiken von Webanwendungen beschäftigen.
 
Ich habe leider nicht die zeit mich genauer mit php zu beschäftigen.

So funktioniert ja jetzt alles bei dem Login nur halt das mit dem Passwort nicht
 
So:

PHP:
if( isset($_POST['submit']) )
{
$_vorname = $_POST["vorname"];
$_name = $_POST["name"];
$_username = $_POST["username"];
$_passwort = $_POST["passwort"];
$_email = $_POST["email"];
$_sprache = $_POST["sprache"];
$_id = $_POST["id"];

$old_pw= mysql_query("SELECT `_passwort` from user WHERE _id = '". mysql_real_escape_string($_SESSION['id']) ."' ");
$fetch_pw = mysql_fetch_array($old_pw);
$old_pw2 = $fetch_pw['_passwort'];

$passwort = empty($_passwort) ? $old_pw2 : md5($_passwort[$id]);

    echo '<font color="#FF0000">Daten geändert!</font>';
    foreach ($_id as $key => $id){
        echo "";
        $aendern = "UPDATE user Set _vorname='$_vorname[$id]', _name='$_name[$id]', _username='$_username[$id]', _passwort='$passwort', _sprache='$_sprache[$id]', _email='$_email[$id]' WHERE _id = $id;";  
        $update = mysql_query($aendern) or die(mysql_error());
    }
}


So sollte es gehen
 
Zuletzt bearbeitet:
Danke, aber leider is danach immernoch das gleiche Problem:

er macht aus dem md5 "verschlüsselten" passwort ein neues md5 "verschlüsseltes" passwort

hat da jemand noch ne idee?
 
PHP:
if( isset($_POST['submit']) ) {
	foreach( $_POST['id'] as $key => $id ) {
		$values = array(
			'`_vorname`  = "'.mysql_real_escape_string($_POST['vorname'][$key]).'"',
			'`_name`     = "'.mysql_real_escape_string($_POST['name'][$key]).'"',
			'`_username` = "'.mysql_real_escape_string($_POST['username'][$key]).'"',
			'`_sprache`  = "'.mysql_real_escape_string($_POST['sprache'][$key]).'"',
			'`_email`    = "'.mysql_real_escape_string($_POST['email'][$key]).'"',
		);
		if( !strlen($_POST['passwort'][$key]) ) {
			$values[] = '`_passwort` = "'.md5($_POST['passwort'][$key]).'"';
		}
		$query = 'UPDATE `user` SET '.implode(',', $values).' WHERE `_id`='.abs(intval($_POST['id'][$key]));
		mysql_query($query) or die(mysql_error());
	}
}
Zusätzlich sollten die empfangenen Daten noch validiert werden, sodass beispielsweise das als Sprach-Attribut nur erlaubte Werte übermittelt werden. Auch dass die ID des Datensatzen an den Benutzer übermittelt werden, stellt ein Sicherheitsrisiko dar und sollte deshalb vermieden werden. Besser ist es du speicherst sie in der PHP-Sitzung, wo sie nicht manipuliert werden können.
 
Ich werd mir php jetzt wohl doch mal genauer anschauen.

Aber ich hätte gern, das mein Login-Bereich funktioniert, dann kann ich in ruhe mal php lernen.

Aber der code von dir hat folgendes bewirkt:

Er hat mir alles ausser dem Passwort aus der Datenbank gelöscht un das falsche Passwort
ist wieder gespeichert worden.

Edit: jetzt funktioniert alles.
 
Zuletzt bearbeitet:
Zurück