PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Multi_AZ Post Variablen Problem



testi
28.11.2014, 23:25
Ich habe bei dem addon multi az das Feld für den Usernamen einfach per type="hidden" ausgeblendet und der Name wird aus der Datenbank ausgelesen, die User können also erst auszahlen wenn ich sie freigeschaltet und ihren nick eingetragen habe.

Nur leider hat nun ein user sich einfach mal den usernamen selbst eingetragen, also nicht in die datenbank sondern nur für diese auszahlung.

Er hat wohl die daten die per post gesendet werden verändert, nun wäre meine Frage wie ich das verhindern kann. Ich würde am liebsten den Nicknamen senden ohne ihn in ein input zu setzen, denn dann ist er veränderbar.

Der Codefetzen:
echo '
<form action="" name="'.$res['schnittstelle'].'_auszahlen" method="post">
<table width="100%" border="0" cellpadding="2" cellspacing="2">
<tr>
<td align="left" width="55%">'.$res['w_nid'].'</td><td align="center"><input type="hidden" name="'.$res['schnittstelle'].'_uid" value="'.$portalnick.'">'.$portalnick.'</td>
</tr>';

if ($res['w_pw'] != 'OFF') {
echo '
<tr>
<td align="left" width="55%">'.$res['w_pw'].'</td><td align="center"><input type="password" name="'.$res['schnittstelle'].'_pw" value="" size="8"></td>
</tr>';
} else {
echo '
<tr>
<td align="left" width="55%"></td><td align="center"><i>Kein Transferpasswort ben&ouml;tigt</i><input type="hidden" name="'.$res['schnittstelle'].'_pw" value="passwort"></td>
</tr>';
}
echo '
<tr>
<td align="left">Wieviel '.$waehrung.' auszahlen? (mind. '.$schnittstelle['auszahlsumme'].')</td><td align="center"><input type="text" name="'.$res['schnittstelle'].'_transmenge" OnKeyUp="'.$res['schnittstelle'].'_gesamtpreis()" value="'.$schnittstelle['auszahlsumme'].'"></td>
</tr>
<tr>
<td align="left">Umrechnung zu '.$res['w_pl'].':</td><td align="center"><font id="'.$res['schnittstelle'].'_summe"></font> '.$res['w_pl'].'</td>
</tr>
<tr>
<td align="center" colspan="2">
<input type="hidden" name="api" value="'.$res['schnittstelle'].'">
<input type="Submit" name="auszahlung" value="Auszahlen"></td>
</tr>
</table>
</form>

Kraemer84
29.11.2014, 01:08
Naja was du machen kannst was endgültig eindeutig ist ..


Wenn sich der User einloggt das du dem loginscript das Speichern der Ip hinzufügst



$ip = md5($_SERVER['REMOTE_ADDR']);
// Egal wo du das Datenbankfeld für die Ip anlegst aber so in etwa
mysql_query("UPDATE user SET session = '".$ip."' WHERE Benutzername = '".$benutzername_login_form."' ") or die (mysql_error());
// Kann man zur zusätzlichen Absicherung so einrichten das du die Session nachdem Logout wieder auf 0 setzt


Wenn du dann die Ip gespeichert hast dann suchst du nur noch den Part woher er die Id bzw den Nick nehmen will und da nimmst du ein



// Wieder aktuelle Ip nehmen
$ip = md5($_SERVER['REMOTE_ADDR']);

// Benutzername anhand frisch gelandener Ip laden
mysql_query("SELECT Benutzername FROM user WHERE ip = '".$ip."'") or die (mysql_error());



über die Ip dürfte es dann eindeutig sein wer sich dahinter befindet und du feste Werte hast die nicht so einfach wie ein nick verändert werden können wobei ich das mit der manipulierten Form heut zum ersten mal höre..

testi
29.11.2014, 11:37
Ich bin jetzt nicht ganz sicher was das bewirkt wenn ich die IP mit abfrage und nutze. Ändern kann er die Daten bevor sie gesendet werden doch dennoch?

Kraemer84
29.11.2014, 17:18
Wenn du die Ip in der Datenbank speichert und dann nochmal beim Formular prüfst kannst du die Werte ja vergleichen ob der Eintrag überhaupt vorhanden ist.. Durch Zufall genau den gleichen md5 Ip Wert zu erraten wäre ein Witz oder fast schier unmöglich



<?php
$ip = md5($_SERVER['REMOTE_ADDR']);

mysql_query("SELECT Benutzername FROM user WHERE ip = '".$ip."'") or die (mysql_error());
$output = mysql_fetch_assoc($sql);

$Benutzername = $output['Benutzername'];

if($Benutzername == '')
{
// Funktion was passiert wenn der Benutzername anhand der Ip adresse nicht gefunden werden kann !Manipulationsverdacht?
}
else
{
//Eigentlich Funktion
}
?>


// edit

Ja das funktioniert aber eben auch halt wenn man das in der action_form verwendet und nicht im html formular .. Ist halt weil das vms immer <form action="" nimmt und keinen genauen pfad..


// edit 2

hab hier auch mal einen Beitrag gefunden zwecks Manipulation .. Hier auch ganz klar der Punkt warum es besser ist bei Sicherheitsabfragen in Form feldern einfach Werte mit der Datenbank abzugleichen da das absichert das selbst wenn manipuliert wird er einfach nicht drum rum kommt den orginalen Wert zu nehmen da sonst eine einfache If Abfrage ihn ins Nirvana schießt..

allein Weil die Form lokal gespeichert und verändert werden kann und dann wenn sie aufgerufen wird mit den eigenen Werten verändert wird .. Hier auch beschrieben mit der Login form wo man die maxlenght entfernt oder ähnliche Spielereien ..

http://www.cgisecurity.com/owasp/html/ch11s04.html