Hilfe - Suche - Mitglieder - Kalender
Vollansicht: Sefrengo v1.6.1
Forum Sefrengo.org > Downloads > Releases
mvsxyz
Sefrengo v1.6.1

Dokumente
Die Installation - Sefrengo auf einem Webserver oder einer lokalen Trainigsumgebung installieren
Update einer Sefrengo Installation - Ein ausführlicher Updateleitfaden
FAQ - Installation
Die erste Sefrengo Seite, Schritt für Schritt - Anfängertutorial

Beim Update beachten
  • Backup der Datenbank und des Dateisystems vor dem Update nicht vergessen!
  • Updateleitfaden beachten - insbesondere das Verzeichnis projektXX/cms/fckeditor muss gegen den neuen projektXX/cms/ckeditor ersetzt werden.


Changelog - Änderungen v1.6.1 zu v1.6.0
QUELLTEXT
See full changelog at <https://github.com/sefrengo-cms/sefrengo-1.x/commits/v1.6.1>

* FIXED: Check numeric variables to prevent SQL injections
* FIXED: Converted searchterm to HTML entities
* FIXED: Updated CKEditor to v4.4.6
* ADDED: Added HTML5 doctype to select in edit layout (thanks to dederpapst3000)


mvsxyz
Ich danke Steffen Rösemann für die gefundenen Sicherheitslücken und die Zusammenarbeit.
FireFlyer
Nach dem Update von 1.4.5 auf 1.6.1 kann ich mich leider nicht mehr einloggen. PHP Version 5.3.29
Es kommt folgende Fehlermeldung:
ERROR! Found non-numeric variable which must be numeric! Execution was stopped, due to a possible SQL injection.

aus der backend/main.php:
QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_numeric($$varname))) {
        die('ERROR! Found non-numeric variable which must be numeric! Execution was stopped, due to a possible SQL injection.');
        exit;
    }
}


Wurde da eine SQL-Update-Routine nicht durchlaufen?
Was muss ich ändern?
mvsxyz
Ich habe es nun so abgeändert, dass die Ausführung nicht mehr abgebrochen wird, sondern mögliche Strings escaped werden.

QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id','value_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_numeric($$varname))) {
        //die('ERROR! Found non-numeric variable which must be numeric! Execution was stopped, due to a possible SQL injection.');
        $$varname = addslashes($$varname);
    }
}


Bitte mal testen und Rückmeldung geben.
sidd
wenn eine zahl erwartet wird, wäre es nicht besser, statt addslashes, intval zu benutzen?

QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id','value_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_int($$varname))) {
        //die('ERROR! Found non-numeric variable which must be numeric! Execution was stopped, due to a possible SQL injection.');
        $$varname = intval($$varname);
    }
}
sidd
@FireFlyer Evtl. kannst du auch mal folgendes kurzzeitig einfügen um dem Problem auf die Schliche zu kommen.

QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_numeric($$varname))) {
        die($varname.' ist keine Zahl... Wert ist:'.$$varname);
        exit;
    }
}


Bitte Poste mal dann die Fehlermeldung hier.

LG,
sidd
mvsxyz
ZITAT(sidd @ Tue. 13. January 2015, 07:28) *
wenn eine zahl erwartet wird, wäre es nicht besser, statt addslashes, intval zu benutzen?


Gute Idee! Das könnte allerdings zu unerwarteten Ergebnissen führen, da er evtl. einen falschen int value ausließt. Wenn ich mögliche Eingaben mit addslashes escape, dann findet die DB keinen Eintrag und bricht die Ausführung ab.
sidd
ZITAT(mvsxyz @ Tue. 13. January 2015, 10:13) *
Gute Idee! Das könnte allerdings zu unerwarteten Ergebnissen führen, da er evtl. einen falschen int value ausließt. Wenn ich mögliche Eingaben mit addslashes escape, dann findet die DB keinen Eintrag und bricht die Ausführung ab.


Hi mvsxyz....

das raff ich nicht....
diese stelle erwartet doch eine ID oder bool,oder?

die einizige variable wäre "sid", welche alphanumerisch ist.... ist das evtl. schon der fehler?

LG
mvsxyz
Danke, für deinen Input. Ich werde es nochmals damit testen.
FireFlyer
@sidd:
Jetzt bekomm ich die genaue Stelle angezeigt:
sid ist keine Zahl... Wert ist:a32179a5a0fac2b881df36a4e064d765

EDIT
Hiermit getestet:
QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_numeric($$varname))) {
        die($varname.' ist keine Zahl... Wert ist:'.$$varname);
        exit;
    }
}


Der besagte Wert ist in der cms_db_cache gespeichert. Und es gibt dort auch noch 6 weitere.

Im Wiki steht schon was über diese Tabelle, aber diese wird normalerweise von SF gelöscht und bis ins Backend schaff ich es ja nicht.
Ich lass die Zeilen noch drin stehen. Sollte bei der Prüfung evtl diese Tabelle zuvor geleert werden?
sidd
das ist das was ich vermutet hatte....

ersetzte es vorerst (bis zum nächsten offiziellen fix) mit

QUELLTEXT
// check numeric vars to prevent SQL injection errors
$numeric_vars = array('idclient','idlang','idbackendmenu','idcatlang','idcat','idcatside','iduser','idtpl','idtplconf','parent','rootparent','sortindex','idlay','author','visible','idside','is_start','idclientslang','idcode','idcontainer','idmod','idplug','idcontainerconf','idcontent','idsidelang','idtype','container','number','online','idcss','idcssupl','idupl','sid','iddirectory','parentid','idfiletype','idgroup','idjs','idlang','is_start','idlayupl','idperm','idrepository','idside','idtracker','user_id','idvalues','idval','u_g_id');

foreach($numeric_vars as $varname) {
    if(isset($$varname) && !(empty($$varname) || is_numeric($$varname))) {
        if($varname=="sid"){
          $$varname = mysql_real_escape_string($$varname);
        }else{
          die('ERROR! Found non-numeric variable which must be numeric! Execution was stopped, due to a possible SQL injection.');
          exit;
        }
    }
}


LG
FireFlyer
Klappt, wenn die sid nicht geprüft wird von SIDD! biggrin.gif
sidd
fein fein ... wink.gif
sid wird zwar nicht geprüft, aber abgesichert wink.gif

somit ist das problem erkannt und kann von mvsxyz gefixxt werden.
Danke für deine Unterstützung, beim finden des Fehlers.

LG
FireFlyer
Kein Thema. Is des schön, wenn mal wieder was zusammen geht! Auf geht's Jungs!!!
bkm
Deprecated (mysql_real_escape_string)
sidd
deswegen
ZITAT
ersetzte es vorerst (bis zum nächsten offiziellen fix)
bkm
ZITAT(sidd @ Wed. 14. January 2015, 08:56) *
deswegen

So schreibts ja nur einer ab und ab einer PHP Version x gibts dann wieder eine Fehlermeldung.
Einfacher sid aus dem Array entfernen und für die('ERROR! Found ...); dann $$varname = intval($$varname); dry.gif
mvsxyz
Ist ja schon gefixt im Repo. Ich werde die nächste Version am WE veröffentlichen.
mvsxyz
Sefrengo 1.6.2 steht zum Download bereit und enthält den besagten Bugfix.
Dieses ist eine vereinfachte Darstellung unseres Foreninhaltes. Um die detaillierte Vollansicht mit Formatierung und Bildern zu betrachten, bitte hier klicken.
Invision Power Board © 2001-2022 Invision Power Services, Inc.