PHP Script auf PHP 7.1 Updaten

  • Hallo,

    Ich Update gerade das WBB 1.2 auf PHP 7.1 und MYSQL 5.7.
    Unter PHP 5.6 sowie aktuelle MYSQL Versionen läuft es bereits aber nun habe ich ein Problem.

    Code
    Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /www/htdocs/w0125294/wbboard/_functions.php on line 1990

    Hier die Entsprechende Datei:
    https://pastebin.com/ErCLR98Y

    Leider kenne ich mich damit nicht aus aber vllt. kann mir jemand sagen was ich ändern muss.

    Changelog

    Wichtig ist das mir eine Angepasste Datei alleine nichts hilft.
    Ich brauche entweder einen entsprechend Kommentierten Code der klar zeigt was original war und durch was es ersetzt wurde oder am besten direkt eine Anleitung zum anpassen, den ich will ein automatisches Skript schreiben für die Updates.


  • Hallo,

    Ich Update gerade das WBB 1.2 auf PHP 7.1 und MYSQL 5.7.
    Unter PHP 5.6 sowie aktuelle MYSQL Versionen läuft es bereits aber nun habe ich ein Problem.

    Ich baue gerade einen Ferrari-Motor an mein Dreirad. Der Motor dreht bereits, aber irgendwie habe ich jetzt ein Problem.

    Habe gerade mal nachgeguckt, diese WBB-Version ist von 2001 - Bestimmt viele schöne Sicherheitslücken drin und so..

    Viel Erfolg beim porten, hier wird dir da vermutlich niemand helfen, viel zu riskant dass da was passiert.

  • Unter PHP 5.6 und MYSQL 5.6 läuft es schon einwandfrei. (es würde auch unter höheren MYSQL Versionen laufen)
    Unter PHP 7.1 gibt es auch nur diese scheiß

    Zitat

    Warning: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in /www/htdocs/w0125294/wbboard/_functions.php on line 1990

    Meldungen.

    Zumindest für das Lite1 von 2004 und das WBB2 gibt es keine bekannten Sicherheitslücken!
    Ich denke das wird für das WBB 1.2 auch zutreffen.

    Ich lasse mich gerne vom gegenteil überzeugen, wer mir einen funktionierenden Exploit zeigen kann, bitte posten.

    Ich habe halt alles umgebaut bereits auf MYSQLi etc. aber mit diesem preg_replace(); code kenne ich mich nicht so aus.
    Ursprünglich läuft das Board nur unter PHP 4 und MYSQL 4 (vllt. sogar nur MYSQL 3) daher finde ich PHP 5.6 und MYSQL 5.6 schon eine ganz gute Leistung bisher. :)

    Einmal editiert, zuletzt von Michael_ (11. April 2017 um 18:22)


  • Zumindest für das Lite1 von 2004 und das WBB2 gibt es keine bekannten Sicherheitslücken!
    Ich denke das wird für das WBB 1.2 auch zutreffen.

    Genau, völlig ausgeschlossen, dass es bei Software Sicherheitslücken gibt, die 13-16 Jahre lang keinerlei Updates gesehen hat!!111einszweidrei

  • https://community.woltlab.com/thread/223566-…972#post1329972

    Original läuft es mit PHP 4 und MYSQL 3.
    Ich hab es nun schon unter PHP 5.6 und MYSQL 5.6 laufen, jetzt helft mir doch das es nicht an PHP 7.1 scheitert ^^

    Es gibt noch immer recht viele User die auch 2017 noch das WBB2 und Lite1 einsetzen.
    Ein relativ großes Forum hat bis vor einiger Zeit auch noch WBB 1.2 eingesetzt.

    Es gibt keine bekannten Sicherheitslücken, und würde es welche geben dann gäbe es bereits Anleitungen selbige zu schließen
    den es gibt noch immer ein paar fähige Leute die sich nachwievor mit den Versionen beschäftigen und auch Hacks, Updates etc. rausbringen.

    Das WBB 1.2 interessiert aber leider so gut wie niemanden mehr.
    Mangels Nachfrage gibt es keine Updateanleitungen (außer meine) und auch kaum Hacks. (Früher gab es viele Hacks aber seit mywbb.info down ist sind die meisten nicht mehr zu bekommen).

    Nur weil die Software alt ist muss sie nicht zwangsläufig Sicherheitslücken aufweisen!
    Wenn du allerdings einen funktionierenden Exploit hast, poste ihn einfach. :)

    Einmal editiert, zuletzt von Michael_ (11. April 2017 um 18:34)

  • Die Fehlermeldung kommt daher, weil in PHP 7.0 das PCRE-Flag e entfernt wurde, da die Ausführung von eval() auf den ersetzten Text mit benutzerkontrolliertem Inhalt grundsätzlich keine gute Idee ist.

    Du musst in der Tat jetzt das PHP-Highlighting aus den Arrays $searcharray und $replacearray ausklammern und preg_replace_callback mit einer Callback-Funktion benutzen, die die Funktion phphighlite mit dem Regex-Treffer aufruft.
    https://secure.php.net/manual/de/refe…n.modifiers.php

    PHP
    function ($m) {
        return phphighlite($m[1]);
    }

    Mit einfachem Text ersetzen wird da nix.

  • Ich danke dir für deinen Post allerdings muss ich gestehen das ich leider Hauptsächlich Bahnhof verstehe.
    Ich weiß leider nicht was ich zu tun habe außer das ich wohl preg_replace durch preg_replace_callback ersetzen muss.

    Möglicherweise kannst du mir nochmal einfacher für einen Hobby Programmierer sagen was ich tun muss.
    vllt. anhand eines Beispiels meiner Datei?

    Mir wäre am liebsten wenn mir jemand hier so ne "Suche" und "Ersetze mit" Updateanleitung erstellen würde wofür ich ggf. gerne auch bisschen was zahlen würde wenn es dann geht, aber mir wäre auch schon mit einer einfachen Anleitung geholfen. (Bestenfalls mit Beispiel).

    Einmal editiert, zuletzt von Michael_ (11. April 2017 um 18:47)

  • Hier mal alle vorkommen dieses Modifiers, wenn ich die zeilen alle auskommentier dann wird das forum angezeigt und es kommen keine Fehlermeldung.
    Allerdings werden BBCodes nicht richtig umgewandelt

    Code
    $searcharray[]="/\[list=(['\"]?)([^\"']*)\\1](.*)\[\/list((=\\1[^\"']*\\1])|(\]))/esiU";
    Code
    $searcharray[]="/\[list](.*)\[\/list\]/esiU";
    Code
    $searcharray[]="/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/esiU";
    Code
    $searcharray[]="/\[url]([^\"]*)\[\/url\]/esiU";
    Code
    $searcharray[]="/\[code](.*)\[\/code\]/esiU";
    Code
    $searcharray[]="/\[code=php](.*)\[\/php\]/esiU";

    Wie kann ich das nun anpassen das mein Forum funktioniert?

    möglicherweise kann mir jemand diese zeilen anpassen? wäre super und das forum würde problemlos laufen. :)


  • Hier mal alle vorkommen dieses Modifiers, wenn ich die zeilen alle auskommentier dann wird das forum angezeigt und es kommen keine Fehlermeldung.
    Allerdings werden BBCodes nicht richtig umgewandelt

    Code
    $searcharray[]="/\[list=(['\"]?)([^\"']*)\\1](.*)\[\/list((=\\1[^\"']*\\1])|(\]))/esiU";
    Code
    $searcharray[]="/\[list](.*)\[\/list\]/esiU";
    Code
    $searcharray[]="/\[url=(['\"]?)([^\"']*)\\1](.*)\[\/url\]/esiU";
    Code
    $searcharray[]="/\[url]([^\"]*)\[\/url\]/esiU";
    Code
    $searcharray[]="/\[code](.*)\[\/code\]/esiU";
    Code
    $searcharray[]="/\[code=php](.*)\[\/php\]/esiU";

    Wie kann ich das nun anpassen das mein Forum funktioniert?

    möglicherweise kann mir jemand diese zeilen anpassen? wäre super und das forum würde problemlos laufen. :)

    Der e modifier am Ende muss raus, weil er deinen Code unsicher macht. Deswegen wurde er auch in den neusten PHP Versionen verboten

    Es ist besser nicht zu moderieren als falsch zu moderieren

  • Ich hab im Internet eine Anleitung gefunden und folgendes zusammengestellt.

    Fehlermeldung
    Parse error: syntax error, unexpected 'var' (T_VAR), expecting end of file in /www/htdocs/w0125294/wbboard/_functions.php on line 3

    Kann mir jemand erklären warum das nicht funktioniert?

    Einmal editiert, zuletzt von Michael_ (11. April 2017 um 20:11)

  • Die Fehlermeldung macht jeweils ohne die modifizierte Quellcodedatei wenig Sinn.

    In dem Falle muss das Schlüsselwort var weg. Das ist ohnehin ein veraltetes Sprachelement aus PHP 4 für public-Mitglieder einer Klasse.
    Variablen im globalen bzw. aktuellen Scope definiert man ohne Weiteres.


    was genau macht phphighlite()? finde nix über google.

    Scheint eine selber definierte Funktion von WBB zu sein.

  • Fatal error: Uncaught Error: Using $this when not in object context in /www/htdocs/w0125294/wbboard/_functions.php:1966 Stack trace: #0 /www/htdocs/w0125294/wbboard/_functions.php(704): prepare_code('Junge <img src=...') #1 /www/htdocs/w0125294/wbboard/thread.php(113): editSignatur('Junge <img src=...', '0') #2 {main} thrown in /www/htdocs/w0125294/wbboard/_functions.php on line 1966

    Hier die komplette Datei

    https://www.pastiebin.com/58ed277beef65

    ich hab eigentlich nur

    <?php

    drunter

    $search_replace = array();

    PHP
    #  $searcharray[]="/[list=(['"]?)([^"']*)\1](.*)[/list((=\1[^"']*\1])|(]))/esiU";
    #  $replacearray[]="formatlist('\3', '\2')"; 
    #  $searcharray[]="/[list](.*)[/list]/esiU";	
    #  $replacearray[]="formatlist('\1')"; 
    #  $searcharray[]="/[url=(['"]?)([^"']*)\1](.*)[/url]/esiU";
    #  $replacearray[]="formaturl('\2','\3')";
    #  $searcharray[]="/[url]([^"]*)[/url]/esiU";	
    #  $replacearray[]="formaturl('\1')";
    #  $searcharray[]="/[code](.*)

    /esiU";
    # $replacearray[]="formatcodetag('\1')";
    # $searcharray[]="/

    PHP
    (.*)

    /esiU";
    # $replacearray[]="phphighlite('\1')";
    [/code]

    Alle mit # versehen

    und dann darunter

    Code
    $this->search_replace['/\[list=([\'"]?)([^"\']*)\1](.*)\[\/list((=\1[^"\']*\1])|(\]))/siU']=function($matches) {return $this->formatlist($matches[3],$matches[2]);};

    eingefügt

    sowie unter

    Code
    if ($phpversionnum<"4.0.5") $bbcode=str_replace("'", "\'", $out);

    das hier eingefügt

    $out = preg_replace_callback_array($this->$search_replace, $out);

    Ich glaube jetzt haben wirs dann bald. :D
    kann mir jemand noch beim letzten schritt behilflich sein?

    Einmal editiert, zuletzt von Michael_ (11. April 2017 um 21:02)

  • $this-> macht außerhalb eines Objekts genauso wenig Sinn. Entferne das und füge $search_replace stattdessen zur Liste von global-Variablen hinzu.

    Außerdem wird der Code als Nächstes auf die Nase fallen, wenn du nicht alle einfachen Anführungsstriche innerhalb des Strings per Backslash escapest.

    PHP
    $search_replace['/[list=([\'"]?)([^"\']*)1](.*)[/list((=1[^"\']*1])|(]))/siU'] = function($matches) {return formatlist($matches[3],$matches[2]);};

    Ein Editor mit Syntaxhervorhebung ist dabei sehr nützlich.

    Den letzten Aufruf von preg_replace kannst du dann ganz entfernen, wenn du alle Zeilen für $searcharray und $replacearray in der Form umgewandelt hast.

  • DANKE!!!!!

    Scheint zu funktioniert. :)
    Vielen dank für deine Hilfe!

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!