[PHP] Linebreaks + UBBParser = Ramp

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
Ha allen.

Ik ben al een tijdje bezig aan een eigen weblog software. Ik gebruik het PEAR pakket HTML_BBCodeParser. Deze zet uit zichzelf echter geen linebreaks(\n) om in '<br />'s.

Nu heb ik de volgende code:

code:
1
2
3
4
5
6
7
8
    function UBBParse($text)
    {
        $text = nl2br($text);
        $this->UBB->setText($text);
        $this->UBB->parse();
        $text = $this->UBB->getParsed();
        return $text;
    }


De subclass UBB is dus de BBCodeParser. Met de volgende invoer:

code:
1
2
3
4
5
6
7
[b]Test Bericht[/b]

[i]Utrecht[/i] - Oude vrouw overleden. Kwalen:
[list]
[li]Hoofdpijn[/li]
[li]Keelpijn[/li]
[/list]


Krijg ik de volgende output:

code:
1
2
3
4
5
6
7
<strong>Test Bericht</strong><br />
<br />
<em>Utrecht</em> - Oude vrouw overleden. Kwalen:<br />
<ul><br />
<li>Hoofdpijn</li><br />
<li>Keelpijn</li><br />
</ul>


Wat mijn probleem dus is, nl2br() zet ook extra <br />'s achter de list items. Terwijl dit normaal door de HTML zelf word gedaan. Zo is dit ook met bijvoorbeeld een
en [quote].

Hopelijk heeft iemand hier oplossingen voor, gezien ik de uitkomst helaas niet meer zie zonder lelijke workarrounds.

PSN: Jorijnn


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Ik heb ook een BBcode parser gemaakt in een ver verleden. (Wie niet hier he? :P)

Ik zet eerst alle \n linebreaks om in een
(break) tag. Vervolgens gebruik ik gewoon de BBcode parser om te bepalen in wat voor context we zitten, en of die
omgezet moet worden in een </p><p> paar als het er twee zijn en de boel in paragraph mode staat, of een <br />, of helemaal niets als je in een list of table zit.

Uitproberen kan hier : http://ubb.eamelink.nl/software/ubb/index.php
En downloaden kan op het holy SF : http://sourceforge.net/projects/eambbparser

De ontwikkeling ervan gaat niet zo heel hard meer, maar het moet in principe allemaal werken en als je bugs vindt los ik ze voor je op :P

Maar wellicht is het vrij triviaal om het in je huidige PEAR parser in te bouwen en is dat makkelijker :)

Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Eerst nl2br en dan pas je bbtags in HTML omzetten.

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

k8skaaay schreef op zaterdag 10 maart 2007 @ 12:11:
Eerst nl2br en dan pas je bbtags in HTML omzetten.
Dan krijg je nog steeds breaks in je lijsten.

Acties:
  • 0 Henk 'm!

  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
eamelink schreef op zaterdag 10 maart 2007 @ 12:04:
Ik heb ook een BBcode parser gemaakt in een ver verleden. (Wie niet hier he? :P)

Ik zet eerst alle \n linebreaks om in een
(break) tag. Vervolgens gebruik ik gewoon de BBcode parser om te bepalen in wat voor context we zitten, en of die
omgezet moet worden in een </p><p> paar als het er twee zijn en de boel in paragraph mode staat, of een <br />, of helemaal niets als je in een list of table zit.

Uitproberen kan hier : http://ubb.eamelink.nl/software/ubb/index.php
En downloaden kan op het holy SF : http://sourceforge.net/projects/eambbparser

De ontwikkeling ervan gaat niet zo heel hard meer, maar het moet in principe allemaal werken en als je bugs vindt los ik ze voor je op :P

Maar wellicht is het vrij triviaal om het in je huidige PEAR parser in te bouwen en is dat makkelijker :)
Dit is een post waar ik zeker wat aan heb. Ik zal vanavond dan ook eens de tijd nemen om het stukje software uit te proberen. Het ziet er in ieder geval al veelbelovend uit. Bedankt voor de tip! Vanavond hoor je meer ;)

PSN: Jorijnn


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
In plaats van
code:
1
2
[list]
  [li]item

Kun je met die class ook
code:
1
[*]item

gebruiken, dan doet'ie het wel "goed".. ;)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Kijk, dat is nog eens handige informatie :)

Waarschijnlijk loopt een • dan automatisch tot aan een \n, en worden niet vervangen tot een <li></li> paar :)

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

Ik ken eigenlijk maar 2 redelijk goede UBB-parsers en die zijn beide niet open source ;)

De meest OS UBB-parsers hebben last van XSS-vulnerabilities (eamelink: die van jou ook, mail me voor details), kunnen geen valid HTML-output garanderen (parsen bijvoorbeeld vrolijk [li]'s zonder [list], [tr]'s zonder [table] en [td]'s zonder [tr]), hebben problemen mbt dubbel-encoden of parsen attributen niet correct.

Een goede parser bestaat uit de volgende componenten:
- tokeniser
- tag-matcher
- treebuilder
- parser

pas bij het uiteindelijke parsen weet je wat als tag geparsed moet worden en wat tekst is, en daar zet je newlines dus pas om in HTML-breaks.

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
crisp schreef op zaterdag 10 maart 2007 @ 15:32:
Ik ken eigenlijk maar 2 redelijk goede UBB-parsers en die zijn beide niet open source ;)
Ik ben wel geïnteresseerd: welke dan wel? Die van React zal waarschijnlijk aardig goed in elkaar steken (en is niet open source), maar een andere ook? Die van vBullitin wellicht?
De meest OS UBB-parsers hebben last van XSS-vulnerabilities (eamelink: die van jou ook, mail me voor details)
Kan je ajb uitleggen hoe een ubb parser XSS fouten kan bevatten?

Ik ben namelijk wel benieuwd naar een zo perfect mogelijk UBB parser; een open source hoeft niet, wel graag gratis :+

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
mithras schreef op zaterdag 10 maart 2007 @ 15:48:
[...]
Ik ben wel geïnteresseerd: welke dan wel? Die van React zal waarschijnlijk aardig goed in elkaar steken (en is niet open source), maar een andere ook? Die van vBullitin wellicht?
Die van de frontpage misschien? :+

Acties:
  • 0 Henk 'm!

  • chris
  • Registratie: September 2001
  • Laatst online: 11-03-2022
crisp schreef op zaterdag 10 maart 2007 @ 15:32:
Een goede parser bestaat uit de volgende componenten:
- tokeniser
- tag-matcher
- treebuilder
- parser

pas bij het uiteindelijke parsen weet je wat als tag geparsed moet worden en wat tekst is, en daar zet je newlines dus pas om in HTML-breaks.
Als je een goede grammatica hebt kan je prima met alleen een parser werken. Zo lastig is UBB nou ook weer niet ;)

Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 22:47
crisp schreef op zaterdag 10 maart 2007 @ 15:32:
Een goede parser bestaat uit de volgende componenten:
- tokeniser
- tag-matcher
- treebuilder
- parser
Als ik de documentatie mag geloven heeft die PEAR parser dat ook crisp :) In ieder geval poept'ie wel altijd valid HTML uit in mijn ervaring, sluit ook zelf tags af, etc. Zullen vast wel betere zijn, want perfect is'ie niet (zoals hier wel gedemonstreerd is), maar wel absoluut een van de betere OS UBB parsers die ik ken.

Wat ze zelf beweren:
This is a parser to replace UBB style tags with their html equivalents.
It does not simply do some regex calls, but is complete stack based parse engine. This ensures that all tags are properly nested, if not, extra tags are added to maintain the nesting. This parser should only produce xhtml 1.0 compliant code. All tags are validated and so are all their attributes. It should be easy to extend this parser with your own tags.
Ik vermoed dat je'm ook wel in kan stellen zelf newlines goed te doen, en anders vrij eenvoudig kan extenden. Maargoed, [*]'s gebruiken is een simpeler alternatief :+

@hierboven: UBB parsers zijn geschreven, jaja, voor BulletinBoards - ie, fora. Dan heb je er geen moer aan dat je zelf valide HTML kan schrijven aangezien je juist daar BB gebruikt waar mensen de boel potentieel kunnen vern**ken met HTML en je dus niet hun input kan vertrouwen.

[ Voor 16% gewijzigd door FragFrog op 10-03-2007 17:06 ]

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:05

pietje63

RTFM

Ik ben zelf zeer te spreken over quickerubb: http://www.roonaan.nl/hot...php?script=quickerubb.php (heb ik ook gebruik van gemaakt in mijn editor script met live preview).

Hier zit voor bepaalde tags een functie in die simple_parse heet, met daarin een switch om nl2br wel of niet toe te passen bij die tag.

Verder heeft crisp wel gelijk neem ik aan, een perfecte parser maken is zeer moeilijk. Ik heb het zelf geprobeerd puur voor het stuk van tabellen, en dat is gewoon niet leuk meer, waardoor ik op een andere constructie overgestapt ben (aangeven dat je een tabel wilt met aantal rijen en kolommen en dan per cel de informatie aangeven).

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
mithras schreef op zaterdag 10 maart 2007 @ 15:48:
Kan je ajb uitleggen hoe een ubb parser XSS fouten kan bevatten?
Als het erg fout gaat heb je bijvoorbeeld zo'n geval:
code:
1
2
3
4
Input:
[url=">Exploit here</a><a href="]Test[/url]
Output:
<a href="">Exploit here</a><a href="">Test</a>

Acties:
  • 0 Henk 'm!

  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
Mischien maak ik er ook zelf wel één ook; zou tenslotte zonde zijn als het hele stuk software zelf geschreven is, en dan alleen de ubb parser niet.

Heeft iemand mischien een beknopte tutorial/uitleg/handleiding hoe stack based in zijn werk gaat?

Jorijn

PSN: Jorijnn


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Wat mijne momenteel "fout" doet is het volgende

code:
1
[img]javascript:alert('XSS');[/img]

wordt
code:
1
<img src="javascript:alert('XSS');" />


Dat is opzich natuurlijk niet erg, want het is natuurlijk logisch dat een browser dat niet uitvoert in een img tag. Helaas blijkt IE dat tóch te doen, en dat is niet zo handig. Want als iemand nu op een forum een stukje javascript in een image tag gooit die cookies verstuurt naar een externe server, kunnen de cookies van alle IE gebruikers gestolen worden zodra ze de pagina met de betreffende code bekijken en dat is natuurlijk sneu voor de IE gebruikers.

Wellicht gaat er nog meer mis met mijn parser, maar dat is mij niet bekend; ik wacht nog even crisps mailtje daarvoor af ;)

Acties:
  • 0 Henk 'm!

  • Jorijn
  • Registratie: Mei 2006
  • Laatst online: 28-11-2024
Hallo Eamelink;

Ik heb op het moment de BB parser geinstalleerd staan.
Echter door het gebruik van de paragraven, krijg je de volgende output:

http://screens.qweet.nl/SnapShot-1032007-19109.png

Enig idee hoe ik die kan opvangen? Een extra paar regels is niet echt handig. Voor de rest; Puik stuk software :)

[ Voor 0% gewijzigd door Jorijn op 10-03-2007 19:20 . Reden: Typo :X ]

PSN: Jorijnn


Acties:
  • 0 Henk 'm!

  • sky-
  • Registratie: November 2005
  • Niet online

sky-

qn nna 👌

Eamelink, kwestie van de javascript er weer uit te halen.
Ik heb daar wel een stukje code voor, zal ik morgen even plaatsen :-)

don't be afraid of machines, be afraid of the people who build and train them.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 00:44

crisp

Devver

Pixelated

mithras schreef op zaterdag 10 maart 2007 @ 15:48:
[...]
Ik ben wel geïnteresseerd: welke dan wel? Die van React zal waarschijnlijk aardig goed in elkaar steken (en is niet open source), maar een andere ook? Die van vBullitin wellicht?
Die van React is inderdaad bijzonder compleet en robuust en daarbij heel flexibel mbt configuratie en het kunnen uitbreiden van tags. Er zitten wel wat foutjes in maar dat betreft meestal edge-cases.

De parser van vBulletin ken ik verder niet...
[...]
Kan je ajb uitleggen hoe een ubb parser XSS fouten kan bevatten?
Op het moment dat script- en/of HTML-injection niet wordt uitgefilterd heb je een XSS-vulnerability. Simple as that ;)
Ik ben namelijk wel benieuwd naar een zo perfect mogelijk UBB parser; een open source hoeft niet, wel graag gratis :+
Perfecte parsers bestaan niet...
Grote prutser schreef op zaterdag 10 maart 2007 @ 15:58:
[...]

Die van de frontpage misschien? :+
De nieuwe parser voor de frontpage die ik onlangs geschreven heb ja ;)
Grootendeels net zo flexibel en uitbreidbaar als de React parser, maar geheel van scratch af geschreven. Ik ben alleen nog niet tevreden over het tag-matching algoritme; die is (net als in React) eigenlijk te simpel waardoor de tag-matcher er in situaties met veel unbalanced tags eigenlijk te snel de brui aan geeft.
chris schreef op zaterdag 10 maart 2007 @ 16:53:
[...]

Als je een goede grammatica hebt kan je prima met alleen een parser werken. Zo lastig is UBB nou ook weer niet ;)
Dat laatste punt had ik beter 'tag-parser' kunnen noemen waarbij de 'parser' eigenlijk gewoon een verzamelnaam is voor alle 4 de stadia. Technisch gezien kan je tag-matching en tree-building wel samen doen maar dan zit je al snel met back-tracking of in-tree manipulations wat behoorlijk ten koste kan gaan van je performance.

En in feite kan je UBB natuurlijk net zo complex maken als bijvoorbeeld HTML...

Intentionally left blank

Pagina: 1