Besserer Markdown-Parser in PHP – Demo
Installieren Sie das Composer-Paket:
composer require erusev/parsedown
Oder laden Sie die neueste Version herunter und fügen Sie Parsedown.php
hinzu
$ Parsedown = new Parsedown ();
echo $ Parsedown -> text ( ' Hello _Parsedown_! ' ); # prints : < p > Hello < em > Parsedown </ em >!</ p >
Sie können auch nur Inline-Markdown analysieren:
echo $ Parsedown -> line ( ' Hello _Parsedown_! ' ); # prints : Hello < em > Parsedown </ em >!
Weitere Beispiele im Wiki und in diesem Video-Tutorial.
Parsedown ist in der Lage, Benutzereingaben innerhalb des von ihm generierten HTML zu maskieren. Darüber hinaus führt Parsedown eine Bereinigung auf zusätzliche Skriptvektoren (z. B. Skript-Link-Ziele) durch, die durch die Markdown-Syntax selbst eingeführt werden.
Um Parsedown mitzuteilen, dass es nicht vertrauenswürdige Benutzereingaben verarbeitet, verwenden Sie Folgendes:
$ Parsedown -> setSafeMode ( true );
Wenn Sie stattdessen HTML in nicht vertrauenswürdigen Benutzereingaben zulassen möchten, die Ausgabe aber dennoch frei von XSS sein soll, wird die Verwendung eines HTML-Bereinigungsprogramms empfohlen, mit dem HTML-Tags auf die Whitelist gesetzt werden können, z. B. HTML Purifier.
In beiden Fällen sollten Sie unbedingt den Einsatz umfassender Verteidigungsmaßnahmen in Betracht ziehen, wie z. B. die Bereitstellung einer Content-Security-Policy (eine Browser-Sicherheitsfunktion), damit Ihre Seite wahrscheinlich auch dann sicher ist, wenn ein Angreifer in einer der ersten Sicherheitslücken eine Schwachstelle findet Verteidigungslinien oben.
Der abgesicherte Modus führt nicht unbedingt zu sicheren Ergebnissen, wenn Erweiterungen für Parsedown verwendet werden. Erweiterungen sollten einzeln bewertet werden, um ihre spezifische Sicherheit gegenüber XSS zu bestimmen.
WARNUNG: Diese Methode ist nicht sicher vor XSS!
Wenn Sie HTML in vertrauenswürdigen Eingaben maskieren möchten, können Sie Folgendes verwenden:
$ Parsedown -> setMarkupEscaped ( true );
Beachten Sie, dass Benutzer dadurch immer noch unsichere Skriptvektoren einfügen können, z. B.: [xss](javascript:alert%281%29)
.
Wie funktioniert Parsedown?
Es versucht, Markdown wie ein Mensch zu lesen. Zunächst werden die Linien betrachtet. Es interessiert, wie die Zeilen beginnen. Dies hilft ihm, Blockaden zu erkennen. Es weiß zum Beispiel, dass eine Zeile, die mit einem -
beginnt, möglicherweise zu einer Liste gehört. Sobald es die Blöcke erkennt, fährt es mit dem Inhalt fort. Beim Lesen wird auf Sonderzeichen geachtet. Dies hilft ihm, Inline-Elemente (oder Inlines) zu erkennen.
Wir nennen diesen Ansatz „linienbasiert“. Wir glauben, dass Parsedown der erste Markdown-Parser ist, der es verwendet. Seit der Veröffentlichung von Parsedown haben andere Entwickler denselben Ansatz verwendet, um andere Markdown-Parser in PHP und in anderen Sprachen zu entwickeln.
Ist es mit CommonMark kompatibel?
Es besteht die meisten CommonMark-Tests. Bei den meisten Tests, die nicht bestanden werden, handelt es sich um recht ungewöhnliche Fälle. Mit zunehmender Reife von CommonMark dürfte sich die Compliance jedoch verbessern.
Wer nutzt es?
Laravel Framework, Bolt CMS, Grav CMS, Herbie CMS, Kirby CMS, October CMS, Pico CMS, Statamic CMS, phpDocumentor, RaspberryPi.org, Symfony Demo und mehr.
Wie kann ich helfen?
Nutzen Sie es, markieren Sie es, teilen Sie es und spenden Sie, wenn Sie sich großzügig fühlen.
Was sollte ich sonst noch wissen?
Ich mache auch Nota – eine Notizen-App, die für lokale Markdown-Dateien entwickelt wurde.