PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Sicherheit im VMS



Pantau
28.01.2007, 15:12
1.
Bei der Sicherheitslücke handelt es sich um einen Fehler in der Nickpage-Datei.

Du musst die Datei content/nickpage.php prüfen;
dort sollte sich im oberen Teil diese oder eine ähnliche Zeile befinden:

$id = $_GET['id'];

$id = (int)$_GET['id'];
Das sollte diese Lücke schließen! Herzlichen Glückwunsch!


Bei der Sicherheitslücke handelt es sich um einen Fehler in der Nickpage-Datei.
--------

2.
Bei der Sicherheitslücke handelt es sich um einen Fehler in der Userprofil-Datei.


Du musst die Datei content/konto/userprofil.php prüfen;
dort sollte sich im oberen Teil diese oder eine ähnliche Zeile befinden:

$_POST['max_forced'];


(int)$_POST['max_forced'];
Das sollte diese Lücke schließen! Herzlichen Glückwunsch!

Dies haben 2 Progger bestätigt

MasterG
20.02.2007, 14:28
Hallo,

also ich habe das 1. schon mal geändert. Aber beim 2. bin ich mir noch unsicher. Bei mir kommt das so vor:

if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
db_query("UPDATE ".$db_prefix."_userdaten SET max_forced = '".$_POST['max_forced']."' WHERE uid=".$_SESSION['uid']."");
$change .= 'Deine Daten wurden aktualisiert!<br>';
Also nach $_POST['max_forced'] ist kein ; und es ist ja nicht einzeln. Kann ich das bedenkenlos ersetzen durch das (int)$_POST['max_forced']; ?

ElDani
01.03.2007, 09:06
das frag ich mich auch gerade...

wie setzt man das dort ein?

Danke schon mal! :)

SebbyPHM
01.03.2007, 10:22
einfach in eine neue Zeile vor dem db_query mit INSERT INTO folgendes einfügen:


$_POST['max_forced'] = (int)$_POST['max_forced'];

ElDani
01.03.2007, 11:05
sorry, bitte, aber
wo bau ich denn die freie Zeile?
und
INSERT INTO ? O.O
nich einfach das StringDingens da rein kopieren?
?(

MasterG
02.04.2007, 19:55
Meinst du das so?



$_POST['max_forced'] = (int)$_POST['max_forced'];
db_query("UPDATE ".$db_prefix."_userdaten SET max_forced = '".$_POST['max_forced']."' WHERE uid=".$_SESSION['uid']."");

TS7
02.06.2007, 01:38
ist das jetzt so richtig wie in dem Post über mir?

jr-coolman
23.06.2007, 09:03
Weis jetzt jemand ob das so korrekt ist wie das in der vorletzten post gemacht wurde?

MK75
23.06.2007, 09:52
So hier muß das, wenn ich nicht irre, bin schon etwas raus aus dem VMS.



if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
$_POST['max_forced'] = (int)$_POST['max_forced'];

ElDani
23.06.2007, 17:38
oki, danke!

Schönes Wochenende! :)

djws
23.06.2007, 17:39
also beide Lösungsvorschläge sind verwendbar.
Es ist egal ob das int.... vor der o.g. db_query kommt oder danach, denn in der angegebenen Query wird $_POST['maxbanner'] ja nicht benutzt, weil da was anderes geupdated wird.

eleganter is die Variante von MK75, weil es das Ganze ein bissl weniger durcheinander bringt als die andere Lösung.

jr-coolman
02.07.2007, 19:56
Original von MK75
So hier muß das, wenn ich nicht irre, bin schon etwas raus aus dem VMS.



if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
$_POST['max_forced'] = (int)$_POST['max_forced'];


Also wenn ich diesen Block so einfüge habe ich den Bug wieder der bei der Orginal Downoad version auch vorhanden ist ab dann lassen sich Vor und nachname nicht mehr ändern.
Mein Block bei dem man vor und zu Name ändern kann sieht so aus:



$_POST['vorname'] = addslashes($_POST['vorname']);
$_POST['nachname'] = addslashes($_POST['nachname']);
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
db_query("UPDATE ".$db_prefix."_userdaten SET vorname = '".$_POST['vorname']."', nachname = '".$_POST['nachname']."', max_forced = '".$_POST['max_forced']."' WHERE uid=".$_SESSION['uid']."");

Was muss ich den an dem ändern das der auch Bugfrei ist?

MK75
03.07.2007, 10:05
Original von jr-coolman

Original von MK75
So hier muß das, wenn ich nicht irre, bin schon etwas raus aus dem VMS.



if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
$_POST['max_forced'] = (int)$_POST['max_forced'];


Also wenn ich diesen Block so einfüge habe ich den Bug wieder der bei der Orginal Downoad version auch vorhanden ist ab dann lassen sich Vor und nachname nicht mehr ändern.
Mein Block bei dem man vor und zu Name ändern kann sieht so aus:



$_POST['vorname'] = addslashes($_POST['vorname']);
$_POST['nachname'] = addslashes($_POST['nachname']);
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 0) $mailstatus = 0;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 0) $mailstatus = 1;
if ($_POST['newsletter'] == 0 and $_POST['paidmails'] == 1) $mailstatus = 2;
if ($_POST['newsletter'] == 1 and $_POST['paidmails'] == 1) $mailstatus = 3;
db_query("UPDATE ".$db_prefix."_emaildaten SET freigabe_fuer = ".$mailstatus.", emailadresse = '".$_POST['emailadresse']."' WHERE uid=".$_SESSION['uid']."");
db_query("UPDATE ".$db_prefix."_userdaten SET vorname = '".$_POST['vorname']."', nachname = '".$_POST['nachname']."', max_forced = '".$_POST['max_forced']."' WHERE uid=".$_SESSION['uid']."");

Was muss ich den an dem ändern das der auch Bugfrei ist?

Danke Dir, aber mal abgesehen davon, wenn ich mich wo anmelde, heiße ich doch immer wie ich heiße? Oder wozu sollte ich meinen Namen ändern können? Wenn ein User seinen Namen änder will, was ja schon etwas sehr selten vorkommt, kann er sich doch an den Betreiber wenden. Kann ja schon mal sein das jemand heiratet, aber mal ehrlich.

jr-coolman
03.07.2007, 18:34
Stimmt.
Aber wenn man das so machen möchte dann würde ich es besser finden wenn man es gleich so macht das der name garnicht änderbar ist.
Und da sind wir wieder bei meinem Problem.
Das habe ich nämlich nicht kapiert wie das geht ich habe die ursprübgliche zeile:



<td>Name:</td>
<td><input type="text" name="nachname" value="<?=$userdaten['nachname'];?>"></td>
</tr>

Genommen und so verändert:



<td>Name:</td>
<td><?=$userdaten['nachname'];?>"></td>
</tr>

Da sie ja so in der richtung ja auch in als Klamm ID anzeige steht.
Der Trick ist das wenn man dann auf "Jetzt ändern" klickt ist die Namenszeile ganz lehr.
Warum das so ist habe ich noch nicht verstanden?

mastermix
03.07.2007, 19:10
ich vermute, weil du, wenn du auf die "Jetzt ändern" seite kommst, keine abfrage der daten mehr gemacht wird und er somit nichts hat, um es einzutragen.
versuchs doch so, mit readonly:


<td>Name:</td>
<td><input type="text" name="nachname" value="<?=$userdaten['nachname'];?>" readonly="readonly"></td>
</tr>

so wirds normal angezeigt, aber trotzdem normal übergeben

jr-coolman
03.07.2007, 19:29
Stimmt so geht es.
Der Rahmen ist dann zwar nach wie vor um den Namen und Vornamen aber ändern lassen sie sich nicht mehr.

mastermix
03.07.2007, 19:50
Original von jr-coolman
Stimmt so geht es.
Der Rahmen ist dann zwar nach wie vor um den Namen und Vornamen aber ändern lassen sie sich nicht mehr.
und das wolltest du ja. ansonsten hat man halt immer das problem, dass die daten irgendwie übergeben werden müssen. bei der klamm id ist das nicht der fall, weil die in einer session gepeichert wird, deswegen ist die auch mit dem angegebenen code auf der nächsten seite anzeigbar

jr-coolman
03.07.2007, 20:37
Ah ja.
Ja das ist so Prima.