Ankündigung

Einklappen
Keine Ankündigung bisher.

Benutzerdefinierte BB-Codes erlauben - Sicherheit?

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Benutzerdefinierte BB-Codes erlauben - Sicherheit?

    Hallo,

    ich erlaube in meiner Software das Erstellen von eigenen BB-Codes, z.B. könnte ein Nutzer den BB-Code [bgcolor=#ff9900]Oranger Text[/bgcolor] haben wollen. Der Code den der Administrator dann anlegt, sieht in etwa so aus: [bgcolor={option}]{param}[/bgcolor]. Alles soweit kein Problem und auch bereits längere Zeit implementiert. Hier ein Ausschnitt aus dem Parser:
    PHP-Code:
    // ...
    function customBB ($text) {
        foreach (
    $this->custom as $re) {
            
    $param = ($re['twoparams'] ? '=([^\]\'\"]*?)' ''); // Paramter for Opening Tag
            
    $regexp '\['.$re['bbcodetag'].$param.'\]'// Opening Tag
            
    $regexp .= '(.+?)'// Getting content
            
    $regexp .= '\[\/'.$re['bbcodetag'].'\]'// Closing Tag
            
    $text preg_replace('~'.$regexp.'~is'$re['bbcodereplacement'], $text);
        }
        return 
    $text;
    }
    // ... 
    Nun zum Problem der derzeitigen Implementation: Es ist möglich vom User z.B. folgende Eingabe zu erhalten: [bgcolor=#ff9900;float:left]Text[/bgcolor]. Das ist ja nun nicht wirklich Sinn der Sache und stellt in meinen Augen auch ein Risiko dar (<, ", ' und > sind hingegen nicht möglich. Wäre ja noch schöner...). Da ich nun aber nicht auch noch generell das ; sperren kann (wo bliebe sonst die Universalität), muss eine andere Lösung her.

    Mein Vorschlag wäre dieser:
    Anstatt der Platzhalter {option} und {param} erstelle ich Platzhalter wie {hex:1}, {text:1}, {number:1}, {url:2} und von mir aus auch {[a-z;0-9_]+:5}. Der Teil vor dem Doppelpunkt würde dann dem Typ der Validierung entsprechen und der Teil danach der eindeutigen Zahl des Parameters (damit später exakt bekannt ist, was mit was ersetzt wird). Ob ich nun reguläre Ausdrücke zulasse, ist dabei ein weiterer Diskussionspunkt. Ich sehe dabei nur das Problem, dass ich (ohne reguläre Ausdrücke) kaum oder nur schwer alle möglichen bzw. gewünschten Muster abbilden kann. Außerdem würde sich natürlich die Spezifikation zur Erstellung von solchen BB-Codes ändern, d.h. alle vorher erstellten Codes werden ungültig, was jetzt natürlich das kleinere Elend wäre.

    Was meint ihr dazu und/oder habt ihr bessere Vorschläge?

    Würde mich über Antworten freuen.

    Mit freundlichen Grüßen
    MaMo

  • #2
    Hallo,

    an dieser Stelle würde ich aus Sicherheitsgründen nur definierte Codes (z.B. [orange]...[/orange]) zulassen. Das erleichtert dir zum einen die Implementierung, zum anderen ist es der Sicherheit dientlich.

    Weiterer Vorteil ist, dass die Definition sehr einfach gestaltet werden kann. Die RegExps sind einfacher bzw. kann man sogar ohne RegExps und mit strpos() + substr() arbeiten.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Implementiert wird es auf jeden Fall, vB, phpBB und Co. schaffen das schließlich auch. phpBB macht es auch ähnlich dem Vorschlag oben. Keine weiteren Ideen und Vorschläge vorhanden?

      Kommentar


      • #4
        Soll es auf jeden Fall bei der Signatur
        Code:
        function customBB ($text) {
        bleiben, also alles in einer Zeichenkette, die Du dann parsen lässt?
        Ich denke da insbesondere an callbacks, die für Tags aufgerufen werden, die nicht von Deiner Syntax abgedeckt werden. Du musst Dich ja nicht unbedingt für die "einer in einer Million"-Fälle krumm machen

        Kommentar


        • #5
          Hi,

          also gegeben ist auf jeden Fall ein String und es muss auch ein String zurückgegeben werden, was dazwischen passiert ist im Grund egal. Wieso fragst Du? An was dachtest Du?

          MfG MaMo

          Kommentar


          • #6
            Wie wär's denn damit, eine Whitelist anzulegen, in der nur jene Attribute enthalten sind, die Du genehmigen willst? Kenne mich zwar noch nicht so sehr damit aus, beschäftige mich aber gerade intensiv mit dem Thema Whitelists, etc.

            ( http://www.php.de/php-einsteiger/503...ifikation.html )

            Gruß
            l.

            Kommentar


            • #7
              Zitat von MaMo-Net Beitrag anzeigen
              An was dachtest Du?
              Hab noch etwas nachgeschoben (schnell genug, um den "editiert..." zu entkommen, aber nicht schnell genug, um Dir zu entkommen )

              Kommentar


              • #8
                Hi,

                tut mir leid, dass ich mich so lange nicht gemeldet habe. Hatte leider auf der Arbeit viel zu tun. Nun zurück zu meiner Anfrage und euren Antworten. Vielen Dank erstmal dafür. Callbacks sind natürlich möglich, allerdings sehe ich im Moment keinen Vorteil, da Du auch nicht genau schreibst, was in den Callbacks ablaufen soll. Wie soll ich da dann feststellen, ob die Daten "sicher" sind?
                Whitelists sind leider zu restriktiv, da man ja auch dort nur wieder nur bestimmte Fälle eingeben kann und nur diese dann möglich sind. Das Problem ist halt, dass es nach Möglichkeit noch flexibel sein soll und ich kann schlecht alle möglichen Einsatzfälle in einer Whitelist ablegen.

                Ich habe mir nun mal das Vorgehen der anderen Forensysteme angesehen.
                Viscacha: siehe Themenstart
                MyBB: Benutzer spezifiziert reguläre Ausdrücke + Ersetzung
                phpBB 3: Benutzt eine Variante die meinem Alternativvorschlag sehr ähnelt, siehe Themenstart
                IPB: Gleiche Vorgehensweise wie Viscacha, inklusive der o.g. "Problematik"
                vBulletin: Gleiche Vorgehensweise wie Viscacha, inklusive der o.g. "Problematik"
                Nicht unterstützt: DeluxeBB, UseBB, Quicksilver Forums, punBB, IceBB, SMF

                Ergo scheint es drei Alternativen zu geben:
                1. Die simple, bereits implementierte Variante
                2. Die Nutzung von Platzhaltern mit bestimmten Filtern, anstatt der ungefilterten Platzhaltern (der o.g. Vorschlag)
                3. Eingabe von kompletten regulären Ausdrücken

                Welche Variante würdet ihr bevorzugen? Einmal aus Sicht des Software-Entwicklers, einmal aus Sicht des Forum-Admins...

                Danke und Gruß
                MaMo

                Kommentar


                • #9
                  Zitat von MaMo-Net Beitrag anzeigen
                  Callbacks sind natürlich möglich, allerdings sehe ich im Moment keinen Vorteil, da Du auch nicht genau schreibst, was in den Callbacks ablaufen soll. Wie soll ich da dann feststellen, ob die Daten "sicher" sind?
                  Garnicht. Das ist dann die Aufgabe des Coders, der den bbCode erstellen will, der sich von Deiner (einfachen) Syntax nicht erfassen lässt.

                  Kommentar


                  • #10
                    Da ist nur das Problem, dass die Oberfläche zum erstellen an normale Foren-Administratoren gerichtet ist und nicht an Programmierer, dann bräuchte ich die Oberfläche gar nicht. Im Endeffekt wird es wohl eine Mischung aus Variante 2 und 3, aber das muss ich nochmal genauer konzipieren...

                    Kommentar

                    Lädt...
                    X