Wiki source for WikkaWikiSafeHTML
===== WikkaWiki => SafeHTML =====
== Umstellung von alter PHP-Version ==
Meldung:
##Fatal error: Uncaught Error: Attempt to modify property "handler_default" on null in /usr/local/www/wdb/3rdparty/core/safehtml/classes/HTMLSax.php:556...## und noch viel länger (statt 556 auch 494)
Lösung: nicht so einfach...
((1)) Neuere Version von //safehtml// nehmen
Bei [[https://github.com/WackoWiki/wackowiki WackoWiki]] wird SafeHTML wohl entwickelt. Der Versuch, die neueste Version von dort in 1.4.2 zu integrieren, schlug fehl. Deshalb sind die nachstehend genannten Schritte obsolet => Lösung weiter unten!
//Einbindung neuer Version - einzelne Schritte:
((2)) Neue Version bei Wacko-Wiki geholt
((2)) Unter ##3rdparty/core/safehtml/## gespeichert
((2)) Änderungen bei Einbindung:
in ##libs / wakka.class.php##:
=> ##function ReturnSafeHTML($html)## ab ca. Zeile 712
in ##wikka.config.php##:
=> ##'safehtml_path' => '3rdparty/safehtml',## (ca. Zeile 35)
(Pfad auf neue Version geändert)
in ##3rdparty / safehtml / safehtml.php##
=> alle includes wurden direkt eingespeichert (HTMLSax3, Decorate, States)//
----
Nach Erläuterung bei Wacko-Wiki wird es so eingebunden:
##<b>Example:</b>
$parser = new SafeHTML;
$result = $parser->parse($doc);
##
Benötigt wird aber auch HTMLSax3 - mit folgenden Dateien:##
_HTMLSax3
|_HTMLSax3.php
|_HTMLSax3
|_Decorators.php
|_States.php
##
((1)) Wie wird SafeHTML in WikkaWiki allgemein eingebunden
Folgende Dateien sind betroffen / hier taucht ein Verweis darauf auf:
Variablen:
- wikka.php
- wikka.config.php
Funktionen werden aufgerufen:
- formatters / wakka.php (2x)
- formatters / html.php (2x)
- libs / Wakka.class.php (viele)
- actions / rss / rss.php
- actions / image / image.php
- actions / files / files.php
- actions / googleform / googleform.php
- actions / textsearchexpanded / textsearchexpanded.php
Sonstige:
- lang / en / FormattingRules.txt
- lang / pl / FormattingRules.txt
Ergebnis von ##grep -r -i "safehtml" wdb##:
## wdb/wikka.php: 'safehtml_path' => '3rdparty/core/safehtml',
wdb/wikka.config.php: 'safehtml_path' => '3rdparty/core/safehtml',
wdb/setup/inc/db_update_mysql.php: rmdirr("safehtml");
wdb/formatters/wakka.php: // SafeHTML will treat this but 'raw' may end up with invalid code!
wdb/formatters/wakka.php: return $wakka->ReturnSafeHTML($newembedded);
wdb/formatters/html.php: // SafeHTML will treat this but 'raw' may end up with invalid code!
wdb/formatters/html.php: return $wakka->ReturnSafeHTML($newembedded);
wdb/libs/Wakka.class.php: * @uses Config::$safehtml_path
wdb/libs/Wakka.class.php: * @uses SafeHTML::parse()
wdb/libs/Wakka.class.php: function ReturnSafeHTML($html)
wdb/libs/Wakka.class.php: $safehtml_classpath = $this->GetConfigValue('safehtml_path').'/classes/safehtml.php';
wdb/libs/Wakka.class.php: require_once $safehtml_classpath;
wdb/libs/Wakka.class.php: $safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php: $filtered_output = $safehtml->parse($html);
wdb/libs/Wakka.class.php.save: * @uses Config::$safehtml_path
wdb/libs/Wakka.class.php.save: * @uses SafeHTML::parse()
wdb/libs/Wakka.class.php.save: function ReturnSafeHTML($html)
wdb/libs/Wakka.class.php.save: #print $safehtml_classpath;
wdb/libs/Wakka.class.php.save: #$safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php.save: #$filtered_output = $safehtml->parse($html);
wdb/libs/Wakka.class.php.save: $safehtml_classpath = $this->GetConfigValue('safehtml_path').DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.'safehtml.php';
wdb/libs/Wakka.class.php.save: require_once $safehtml_classpath;
wdb/libs/Wakka.class.php.save: $safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php.save: $filtered_output = $safehtml->parse($html);
wdb/lang/pl/defaults/FormattingRules.txt:Domyślnie niektóre polecenia HTML są usuwane, celem zabezpieczenia przed potencjalnie niebezpiecznym kodem. Więcej informacji na ten temat: Wikka:SafeHTML.
wdb/lang/en/defaults/FormattingRules.php:printf(T_('By default, some HTML tags are removed by the %s parser to protect against potentially dangerous code. The list of tags that are stripped can be found on the %s page.'), '""SafeHTML""', 'Wikka:SafeHTML');
wdb/actions/rss/rss.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/rss/rss.php: echo $this->ReturnSafeHTML($cached_output);
wdb/actions/image/image.php:/* 6) Return the output. We don't need ReturnSafeHTML anymore. */
wdb/actions/table/table.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/table/table.php: echo $this->ReturnSafeHTML($cached_output);
wdb/actions/googleform/googleform.php:// Sanitization: Passing $query to htmlspecialchars_ent instead of ReturnSafeHTML(). Inside the value parameter of the input field,
wdb/actions/files/files.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/files/files.php: //Although $output is passed to ReturnSafeHTML, it's better to sanitize $text here. At least it can avoid invalid XHTML.
wdb/actions/files/files.php: $output = $this->ReturnSafeHTML($output);
wdb/actions/files/files.php: $output = $this->ReturnSafeHTML($output);
wdb/actions/textsearchexpanded/textsearchexpanded.php: * @uses Wakka::ReturnSafeHtml()
wdb/actions/textsearchexpanded/textsearchexpanded.php:$result_page_list = $this->ReturnSafeHtml($result_page_list);
wdb/3rdparty/core/safehtml/classes/HTMLSax_old.php: If you'll use unmodified HTMLSax, Safehtml will be NOT SAFE!
wdb/3rdparty/core/safehtml/classes/safehtml.php: SafeHTML Parser.
wdb/3rdparty/core/safehtml/classes/safehtml.php: http://pixel-apes.com/safehtml
wdb/3rdparty/core/safehtml/classes/safehtml.php:class safehtml {
wdb/3rdparty/core/safehtml/classes/safehtml.php: function safehtml() {
wdb/3rdparty/core/safehtml/classes/HTMLSax.php: If you'll use unmodified HTMLSax, Safehtml will be NOT SAFE!
wdb/3rdparty/core/safehtml/readme.txt:SafeHTML
wdb/3rdparty/core/safehtml/readme.txt:http://pixel-apes.com/safehtml
wdb/3rdparty/core/safehtml/readme.txt:Please, subscribe to http://pixel-apes.com/safehtml/feed/rss feed in order to receive notices
wdb/3rdparty/core/safehtml/readme.txt:when SAFEHTML will be updated.
wdb/3rdparty/core/safehtml/readme.txt: * New array, closeParagraph, contains list of block-level elements. When we open such elemet, we should close paragraph before. . It allows SafeHTML to produce more XHTML compliant code.
wdb/3rdparty/core/safehtml/readme.txt: * Now SafeHTML strips down table elements when we are not inside table.
wdb/3rdparty/core/safehtml/readme.txt: * Now SafeHTML correctly closes unclosed "li" tags: before opening "li" of the same nesting level.
wdb/3rdparty/core/safehtml/readme.txt: Bug fix: safehtml hangs on <style></style></style> code.
Binary file wdb/sql/wikka_sqlite3.db matches##
((1)) Zweiter Anlauf mit Verbesserung des ursprünglichen Codes
Dieser Versuch war erfolgreich:
((2)) Code für Klassen verbessert
Die meisten Stellen können mit dem Tool [[https://github.com/rectorphp/rector rector]] korrigiert werden.
=> es mussten Konstruktoren in allen Klassen neu geschrieben werden und
=> ferner einige Deklarationen von Arrays
((2)) Problem des Konstruktors bei Vererbung!
Nach Umsetzung der standardmäßigen Korrekturen (Vorschlag rector) kam immer noch ein Fehler bei ca. Zeile 300 in der Funktion ##_parse($state = XML_HTMLSAX_STATE_START)## => ##$state = $this->State[$state]->parse($this);##.
**offensichtliches Problem**:
Die Klassen, die von der Klasse ##XML_HTMLSax_StateParser## in ##HTMLSax.php## abgeleitet werden (=> ##XML_HTMLSax_StateParser_Gtet430## und - eigentlich obsolet - ##XML_HTMLSax_StateParser_Lt430##)
**Lösung**:
explizit die Konstruktion-Routine der Parent-Klasse aufrufen:
##parent::""__""construct($htmlsax);##
== Umstellung von alter PHP-Version ==
Meldung:
##Fatal error: Uncaught Error: Attempt to modify property "handler_default" on null in /usr/local/www/wdb/3rdparty/core/safehtml/classes/HTMLSax.php:556...## und noch viel länger (statt 556 auch 494)
Lösung: nicht so einfach...
((1)) Neuere Version von //safehtml// nehmen
Bei [[https://github.com/WackoWiki/wackowiki WackoWiki]] wird SafeHTML wohl entwickelt. Der Versuch, die neueste Version von dort in 1.4.2 zu integrieren, schlug fehl. Deshalb sind die nachstehend genannten Schritte obsolet => Lösung weiter unten!
//Einbindung neuer Version - einzelne Schritte:
((2)) Neue Version bei Wacko-Wiki geholt
((2)) Unter ##3rdparty/core/safehtml/## gespeichert
((2)) Änderungen bei Einbindung:
in ##libs / wakka.class.php##:
=> ##function ReturnSafeHTML($html)## ab ca. Zeile 712
in ##wikka.config.php##:
=> ##'safehtml_path' => '3rdparty/safehtml',## (ca. Zeile 35)
(Pfad auf neue Version geändert)
in ##3rdparty / safehtml / safehtml.php##
=> alle includes wurden direkt eingespeichert (HTMLSax3, Decorate, States)//
----
Nach Erläuterung bei Wacko-Wiki wird es so eingebunden:
##<b>Example:</b>
$parser = new SafeHTML;
$result = $parser->parse($doc);
##
Benötigt wird aber auch HTMLSax3 - mit folgenden Dateien:##
_HTMLSax3
|_HTMLSax3.php
|_HTMLSax3
|_Decorators.php
|_States.php
##
((1)) Wie wird SafeHTML in WikkaWiki allgemein eingebunden
Folgende Dateien sind betroffen / hier taucht ein Verweis darauf auf:
Variablen:
- wikka.php
- wikka.config.php
Funktionen werden aufgerufen:
- formatters / wakka.php (2x)
- formatters / html.php (2x)
- libs / Wakka.class.php (viele)
- actions / rss / rss.php
- actions / image / image.php
- actions / files / files.php
- actions / googleform / googleform.php
- actions / textsearchexpanded / textsearchexpanded.php
Sonstige:
- lang / en / FormattingRules.txt
- lang / pl / FormattingRules.txt
Ergebnis von ##grep -r -i "safehtml" wdb##:
## wdb/wikka.php: 'safehtml_path' => '3rdparty/core/safehtml',
wdb/wikka.config.php: 'safehtml_path' => '3rdparty/core/safehtml',
wdb/setup/inc/db_update_mysql.php: rmdirr("safehtml");
wdb/formatters/wakka.php: // SafeHTML will treat this but 'raw' may end up with invalid code!
wdb/formatters/wakka.php: return $wakka->ReturnSafeHTML($newembedded);
wdb/formatters/html.php: // SafeHTML will treat this but 'raw' may end up with invalid code!
wdb/formatters/html.php: return $wakka->ReturnSafeHTML($newembedded);
wdb/libs/Wakka.class.php: * @uses Config::$safehtml_path
wdb/libs/Wakka.class.php: * @uses SafeHTML::parse()
wdb/libs/Wakka.class.php: function ReturnSafeHTML($html)
wdb/libs/Wakka.class.php: $safehtml_classpath = $this->GetConfigValue('safehtml_path').'/classes/safehtml.php';
wdb/libs/Wakka.class.php: require_once $safehtml_classpath;
wdb/libs/Wakka.class.php: $safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php: $filtered_output = $safehtml->parse($html);
wdb/libs/Wakka.class.php.save: * @uses Config::$safehtml_path
wdb/libs/Wakka.class.php.save: * @uses SafeHTML::parse()
wdb/libs/Wakka.class.php.save: function ReturnSafeHTML($html)
wdb/libs/Wakka.class.php.save: #print $safehtml_classpath;
wdb/libs/Wakka.class.php.save: #$safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php.save: #$filtered_output = $safehtml->parse($html);
wdb/libs/Wakka.class.php.save: $safehtml_classpath = $this->GetConfigValue('safehtml_path').DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.'safehtml.php';
wdb/libs/Wakka.class.php.save: require_once $safehtml_classpath;
wdb/libs/Wakka.class.php.save: $safehtml = instantiate('safehtml');
wdb/libs/Wakka.class.php.save: $filtered_output = $safehtml->parse($html);
wdb/lang/pl/defaults/FormattingRules.txt:Domyślnie niektóre polecenia HTML są usuwane, celem zabezpieczenia przed potencjalnie niebezpiecznym kodem. Więcej informacji na ten temat: Wikka:SafeHTML.
wdb/lang/en/defaults/FormattingRules.php:printf(T_('By default, some HTML tags are removed by the %s parser to protect against potentially dangerous code. The list of tags that are stripped can be found on the %s page.'), '""SafeHTML""', 'Wikka:SafeHTML');
wdb/actions/rss/rss.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/rss/rss.php: echo $this->ReturnSafeHTML($cached_output);
wdb/actions/image/image.php:/* 6) Return the output. We don't need ReturnSafeHTML anymore. */
wdb/actions/table/table.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/table/table.php: echo $this->ReturnSafeHTML($cached_output);
wdb/actions/googleform/googleform.php:// Sanitization: Passing $query to htmlspecialchars_ent instead of ReturnSafeHTML(). Inside the value parameter of the input field,
wdb/actions/files/files.php: * @uses Wakka::ReturnSafeHTML()
wdb/actions/files/files.php: //Although $output is passed to ReturnSafeHTML, it's better to sanitize $text here. At least it can avoid invalid XHTML.
wdb/actions/files/files.php: $output = $this->ReturnSafeHTML($output);
wdb/actions/files/files.php: $output = $this->ReturnSafeHTML($output);
wdb/actions/textsearchexpanded/textsearchexpanded.php: * @uses Wakka::ReturnSafeHtml()
wdb/actions/textsearchexpanded/textsearchexpanded.php:$result_page_list = $this->ReturnSafeHtml($result_page_list);
wdb/3rdparty/core/safehtml/classes/HTMLSax_old.php: If you'll use unmodified HTMLSax, Safehtml will be NOT SAFE!
wdb/3rdparty/core/safehtml/classes/safehtml.php: SafeHTML Parser.
wdb/3rdparty/core/safehtml/classes/safehtml.php: http://pixel-apes.com/safehtml
wdb/3rdparty/core/safehtml/classes/safehtml.php:class safehtml {
wdb/3rdparty/core/safehtml/classes/safehtml.php: function safehtml() {
wdb/3rdparty/core/safehtml/classes/HTMLSax.php: If you'll use unmodified HTMLSax, Safehtml will be NOT SAFE!
wdb/3rdparty/core/safehtml/readme.txt:SafeHTML
wdb/3rdparty/core/safehtml/readme.txt:http://pixel-apes.com/safehtml
wdb/3rdparty/core/safehtml/readme.txt:Please, subscribe to http://pixel-apes.com/safehtml/feed/rss feed in order to receive notices
wdb/3rdparty/core/safehtml/readme.txt:when SAFEHTML will be updated.
wdb/3rdparty/core/safehtml/readme.txt: * New array, closeParagraph, contains list of block-level elements. When we open such elemet, we should close paragraph before. . It allows SafeHTML to produce more XHTML compliant code.
wdb/3rdparty/core/safehtml/readme.txt: * Now SafeHTML strips down table elements when we are not inside table.
wdb/3rdparty/core/safehtml/readme.txt: * Now SafeHTML correctly closes unclosed "li" tags: before opening "li" of the same nesting level.
wdb/3rdparty/core/safehtml/readme.txt: Bug fix: safehtml hangs on <style></style></style> code.
Binary file wdb/sql/wikka_sqlite3.db matches##
((1)) Zweiter Anlauf mit Verbesserung des ursprünglichen Codes
Dieser Versuch war erfolgreich:
((2)) Code für Klassen verbessert
Die meisten Stellen können mit dem Tool [[https://github.com/rectorphp/rector rector]] korrigiert werden.
=> es mussten Konstruktoren in allen Klassen neu geschrieben werden und
=> ferner einige Deklarationen von Arrays
((2)) Problem des Konstruktors bei Vererbung!
Nach Umsetzung der standardmäßigen Korrekturen (Vorschlag rector) kam immer noch ein Fehler bei ca. Zeile 300 in der Funktion ##_parse($state = XML_HTMLSAX_STATE_START)## => ##$state = $this->State[$state]->parse($this);##.
**offensichtliches Problem**:
Die Klassen, die von der Klasse ##XML_HTMLSax_StateParser## in ##HTMLSax.php## abgeleitet werden (=> ##XML_HTMLSax_StateParser_Gtet430## und - eigentlich obsolet - ##XML_HTMLSax_StateParser_Lt430##)
**Lösung**:
explizit die Konstruktion-Routine der Parent-Klasse aufrufen:
##parent::""__""construct($htmlsax);##