Snippets - Diskussionsthread

Zuletzt bearbeitet:
Das tut dieses Skript ganz sicher nicht!
Es löscht nur den Inhalt der superglobalen Arrays. Lies: https://www.php.net/manual/de/security.globals.php

Um das zu erreichen braucht man:
ini_set ( 'register_globals', '0' );

Netter Versuch, aber
  1. Wie soll es den Inhalt der superglobalen Arrays löschen, wenn das unset auf normale Variablen ausgeführt wird
  2. Ein ini_set('register_globals', '0') ist a) falsch, da register_globals zwischen ON und OFF entscheidet, ist b) schon allein logisch zur Laufzeit ziemlicher Unsinn, da das PHP die Variablen ja nunmal schon gesetzt hat, und deshalb c) während der Laufzeit nicht möglich. Lies!
  3. Dein Link erklärt nur nochmal, warum es sinnvoller ist register_globals aus zu stellen. Und das war immer meine Absicht, nur, dass es manchmal halt nicht möglich ist.

Und nebenbei ändert mein Skript nicht nur die Sicherheit, sonder verhindert auch das auftreten von Fehlern (mind. bei PHP4), wenn der eine der bereits durch register_globals gesetzten Variablen mit anderem Inhalt neu Beschreiben soll (Erfahrungswert von einem 1&1-Webspace).
 
[...] Ein ini_set('register_globals', '0') ist a) falsch, da register_globals zwischen ON und OFF entscheidet, [...]
Nene, das geht auch mit 0 und 1 (s. https://de2.php.net/manual/de/ini.php).
Und nebenbei ändert mein Skript nicht nur die Sicherheit, sonder verhindert auch das auftreten von Fehlern (mind. bei PHP4), wenn der eine der bereits durch register_globals gesetzten Variablen mit anderem Inhalt neu Beschreiben soll (Erfahrungswert von einem 1&1-Webspace).
Den Satz versteh ich ned :mrgreen:

@DocTrax:
Der Schnipsel funktioniert freilich :hö:
 

Argh. Da hatte ich gehofft, ich hätte recht..

Den Satz versteh ich ned :mrgreen:

Ich mein des so, dass ich mal nen Skript hatte, bei dem die Eingabe eines Formulars ausgewertet wurde per $_POST['name']. Da auf dem Server aber register_globals = 1 war, war auch $name schon belegt. Nun habe ich aber im Verlauf des Skriptes $name anderweitig belegen wollen. Und das wiederrum hat dazu geführt, dass $name zwar Inhalt hatte, aber nie den, den ich zugeweisen hatte. Selbst ein Zuweisung nach dem Schema $name = 'Chuck Norris' hat nicht funktioniert, wenn ich $name danach per echo ausgegeben habe kam in dem Fall nur 'C' bei raus - kA was PHP da macht.
 
Hmm... das kann ich mir nicht wirklich vorstellen, weil du überschreibst den alten Wert ja immer, egal was vorher drin war.

Es sieht anders aus, wenn du eine Variable abhängig von ihrem Inhalt änderst. Da wirft dir aber PHP E_NOTICEs, um dich auf diese Gefahr hinzuweisen.
Bsp:
PHP:
<?php
$var.='bar'; // E_NOTICE
echo $var;
?>
 
Erledigt. Ich dachte, ihr testet die Snippets vor dem Posten :LOL:
 
Hallo!

Hätte mal ne Frage zu dem Snippets Sichere Querys!

Kann es sein das dies nur mit SELECT funktioniert?
Hab probiert damit eine UPDATE durchzuführen. Es wir jedoch nur alles aus dem Spalte in der DB auf 0 bzw gelöscht. Grundsätzlich wie wenn im Query kein daten stehen quasi ein leeres UPDATE.
Mit Select funktioniert einwandfrei.

Danke im Voraus

LG
 
Hallo!

Hätte mal ne Frage zu dem Snippets Sichere Querys!

Kann es sein das dies nur mit SELECT funktioniert?

Ohne Code kann dir niemand helfen. Allerdings sollte die Funktion mit hundertprozentiger Sicherheit mit jedem erdenklichen SQL-Statement funktionieren, weil einfach nur die Platzhalter ersetzt werden, die eigentliche Query-Struktur allerdings unangetastet bleibt.

Greetz

paddya
 
Hallo!

Also das Snippets hab ich genau so übernommen.
und meine Query
PHP:
db_query("UPDATE user SET mail='%s',vname='%s',nname='%s'",$mail,$vname,$nname);

LG
 
Hallo!

Also das Snippets hab ich genau so übernommen.
und meine Query
PHP:
db_query("UPDATE user SET mail='%s',vname='%s',nname='%s'",$mail,$vname,$nname);

LG

Dir fehlt der WHERE-Clause um einzuschränken, welche Datensätze aktualisiert werden sollen.

Greetz

paddya
 
Hy!

Ja ist richtig!Danke!

Aber grundsätzlich sollte ja in der DB dan was dirnn stehen.
Error wird auch keiner ausgegeben
und wenn ich die var per echo ausgebe werden diese auch korrekt angezeigt aber leider nicht in die DB geschrieben!

LG
 
Nein ich bin dabei ein Formular zu erstellen wo der User seine Profildaten aktualisieren kann.
Also in der DB steht sehr wohl was drin.
Jedoch werden keine neuen werte gespeichert sonder mit 0 oder gar nichts ersetzt.
Ich hab dann die Formulardaten per echo vor und nach dem query ausgegeben und da werden sie so richtig ausgegeben.

LG
 
Das ist allerdings merkwürdig. Lass dir mal das SQL-Statement ausgeben, was vsprintf() zurückgibt und poste es hier.

Greetz

paddya
 
:oops: wie mach ich das?

LG

PHP:
function db_query($query){
    $args=func_get_args();
    $vargs=array();
    for($i=1;$i<func_num_args();$i++) {
      if(get_magic_quotes_gpc()) {
        $args[$i]=stripslashes($args[$i]);
      }
      $vargs[]=mysql_real_escape_string($args[$i]);
    }
    $query=vsprintf($query,$vargs);
    echo $query;
    $res=mysql_query($query);
    return($res);
  }

Greetz

paddya
 
Ist das Snippet denn richtig angepasst?

PHP:
db_query("UPDATE %s SET %s='%s',%s='%s',%s='%s'",user,mail,'$mail',vname,'$vname',nname,'$nname');

1. %s = Tabellenname
2. %s = Tabellenspalte mail
3. %s = Wert von 2.
4. %s = Tabellenspalte vname
5. %s = Wert von 4.
6. %s = Tabellenspalte nname
7. %s = Wert von 6.