![]() |
| | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
|
Mir geht es um folgendes, für ein Kommetarfeld will ich der Einfachheit halber html erlauben aber mit recht begrenzten Mitteln (nur gewisse Tags und nur gewisse attribute für die tags erlaubt) und suche daher nach einer fertigen Lösung mit der man sowas recht einfach erledigen kann, sprich eine einfache config (z.b. in form eines arrays mit den erlaubten tags + dazugehörigen attributen) und einfaches anwenden: PHP-Code: Vom Grundgedanken her erstmal nicht kompliziert sowas eventuell mit Regex zu erledigen, aber weitere Probleme tauchen auf: invalides html (vergessen elemente zu schließen oder ähnliches) desweiteren soll es auch nicht möglich sein in irgendeiner form JavaScript / CSS einzubauen, sei es über a href, a onclick oder über sonst irgendwelche möglichen Bugs. Bis jetzt gefunden habe ich htmlpurifier, aber noch nicht getestet (was ich dann mal tun werde). Mit ca 700kb Code (160 Dateien) nur für die library erschlägt mich das ganze grad erstmal Würde mich freuen falls jemand ein paar Erfahrungen beisteuern kann oder andere Alternativen kennt. |
| | |
| | Nach oben #3 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 690
|
Hmm... Für das, was du da vor hast scheint mir die Klasse etwas "oversized" zu sein!? Das muss doch auch einfacher und vorallem kürzer gehen!? Was spricht denn gegen einen eigenen Filter mittels RegEx? Bei a-Tags kannst du ja durch Verbieten von onClick schon JavaScript in der Hinsicht ausschalten. Bzw. all on*irgendwas*-Attribute garnicht erst erlauben, was denke ich Sinn macht!? Das größere Problem wird aber wohl tatsächlich sein, auf korrektes HTML zu achten... Hmm...
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #4 | |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
| Zitat:
1) an alles zu denken 2) eventuelle Sicherheitslücken oder so zu vergessen 3) Aufwand Gerade mit regex tue ich mich dann bei sowas schwer, alle möglichen Fälle, die Reihenfolge in denen es stehen darf ...... zu erfassen. Ich bin bis jetzt wegen Uni und ein paar andern Dingen aber auch noch nicht weiter mit der Klasse zum testen gekommen, aber ich werde das hoffentlich am Wochenende nachholen können. mfg robo47 | |
| | |
| | Nach oben #5 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 690
|
OK, du hast Angst was zu vergessen, aber ich frage dich was besser ist: a) Es selber vergessen oder b) Sich blind darauf verlassen, dass der Andere an alles gedacht hat... Was die RegEx angeht, so würde ich erstmal die einzelnen Elemente auslesen lassen und prüfen, sowie durchnummerieren: Code: <div> <div>Dies ist <b>Box 2</b> in <b>Box 1</b></div> <div>Dies ist <b>Box 3</b> in <b>Box 1</b></div> </div> Code: <div:1> <div:2>Dies ist <b:1>Box 2</b:1> in <b:1>Box 1</b:1></div:2> <div:2>Dies ist <b:1>Box 3</b:1> in <b:1>Box 1</b:1></div:2> </div:1> Wenn du nun am Ende noch schaust, welcher Wert größer ist als 0, dann weißt du auch schon, dass bei diesem Tag zu wenige Close-Tags gesetzt wurden. Wenn du nun auch noch etwas mehr Aufwand betreibst, speicherst du auch noch irgendwie mit ab, wie die Struktur genau aussieht, sprich: Welches Element sich in welchem Element befindet. Sollte z.B. eienr der B-Tags nicht geschlossen worden sein, bevor das DIV-Tag geschlossen wird, muss an dieser Stelle nachgesteuert werden. Im Grunde genommen ist es nicht ganz sooo schwierig, auch wenn ich mir das jetzt noch deutlich einfacher vorstelle, als es in Wirklichkeit ist. Dennoch aber keine unlösbare Aufgabe. Da ich die Methode aber auch für meine BB-Codes interessant finde und vorher garnicht darüber nachgedacht habe, werde ich mich in naher Zukunft auch mal damit befassen
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #6 |
| Lutz Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 690
|
Zu meinem vorherigen Posting: Schau mal bitte in folgenden Thread, da wird eine Methode von RegEx vorgestellt, die mir bislang noch nicht bekannt war, für die Verarbeitung von HTML-Code jedoch sinnvoll sein könnte: BBCode "noparse"
__________________ Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll |
| | |
| | Nach oben #7 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
|
Hatte den Thread etwas aus den Augen verloren, fürs erste werde ich wohl versuchen mit dem purifier das ganze zu lösen, das einmalige parsen eines geschriebenen Kommentars sollte nicht das Problem sein, er wird dann ja auch so gespeichert, also keine Option unter der die Performance sonderlich leidet, in Kombination mit Tidy dürfte das auch validen Code ausspucken.
|
| | |
| | Nach oben #8 |
| Benutzer Registriert seit: 24.10.2006
Beiträge: 90
|
Am einfachsten du erstellst aus der eingabe ein DOMDocument und validierst das dann gegen ein Schema, Relax NG oder DTD. Da hast du kaum Aufwand, 99,999%ige Sicherheit und ist beliebig erweiterbar. MfG Tom Geändert von Byrel (01.11.2007 um 22:39 Uhr) |
| | |
| | Nach oben #9 | |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
| Zitat:
Validierung an einer vorhandenen DTD würde ja dann auch nur funktionieren wenn ich wieder ein komplettes Dokument habe (was der Kommentar ja nicht ist), anderfalls müsste ich ja eine eigene DTD definieren die auf der verwendeten des kompletten Dokuments (xhtml strict oder transitional) basiert aber nur den Teil innerhalb eines DIVs validiert (geht das überhaupt ?). Die Frage die sich mir da jetzt stellt, habe ich da dann auch zusätzlich zu der Möglichkeit der Validierung beim scheitern die Möglichkeit einer "Filterung" ? Also ich will nicht nur wissen ob der Kommentar meiner DTD (schon) entspricht, sondern ich will sie so filtern, dass sie zu der DTD passen, sonst muss ich da ja auch wieder auf was anderes zurückgreifen und dann bringt es mir keinen Mehrwert, dann kann ich auch bei purifier ( + tidy ) bleiben weil ich damit theorhetisch validierung + filterung habe. mfg robo47 | |
| | |
| | Nach oben #10 |
| Benutzer Registriert seit: 24.10.2006
Beiträge: 90
|
du kannst den input validieren. du kannst input filtern und zwar gegen eine whitelist. gleich wie der html purifier, nur da du ja der meinung bist dass das zu groß ist und auf die performance geht, hab ich dir eben das vorgeschlagen. Nur solltest du austesten wie schnell er ist und wenn ich davon ausgehe, dass es für deinen Blog ist dann dürfte Performance ja keine Role spielen, weil dein Blog soweit ich das einschätzen kann, nicht besonders frequentiert (100 Seitenaufrufe / Tag ?) und kaum kommentiert ist und wenn da mal alle paar Tage wer einen Eintrag macht, wirst du nix davon merken... also bei so kleinen Blogs / Homepages braucht man sich über Performance (Code Optimierung, Caching etc.) überhaupt keine Gedanken machen ... EDIT: Ja du brauchst ja keine vorhandene DTD du kannst dir ja schnell selbst eine basteln, wo du sagst strong, em, img (mit attributen src und alt), u, p dürfen verwendet werden und fertig. Das is net 6 Zeilen DTD oder so und macht kaum Aufwand und dann kannst du das mit simpelxml (LIBXML_DTDVALID) oder DomDocument ($doc->valid()) validieren. Du müsstest halt noch einen wurzelknoten und so hinzufügen aber das is ja nicht der rede wert... MfG Tom Geändert von Byrel (02.11.2007 um 17:42 Uhr) |
| | |
| | Nach oben #11 |
| Benjamin Steininger Registriert seit: 02.06.2005 Ort: weiher im tiefsten Odenwald
Beiträge: 1.208
|
Also nach ein paar Tests mit Purifier bin ich davon erstmal abgekommen, die Funktionalität + das Ergebnis überzeugen, aber 0,8 Sekunden NUR für das Includen der benötigten Klassen ist einfach zu lange, das fällt einfach auf. Bin dann aber noch auf htmLawed gestoßen, was im gesamten ein gutes Stück kleiner ist, und zusammen mit tidy gut funktioniert und insgesamt (includes + testcode) nur < 0.08s braucht. Hier ein bißchen Beispielcode für jeden den es interessiert: PHP-Code: |
| | |
| | Nach oben #12 |
| Dejan Spasic Registriert seit: 05.01.2006 Ort: Düsseldorf
Beiträge: 169
|
Du kannst dir auch mal HTML_Safe anschauen. Hatte es vor kurzen eingesetzt und bin recht zufrieden. Wie die Prefomence ist kann ich jetzt nicht sagen...
|
| | |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Merkwürdiges HTML | ex³ | Plauderecke | 8 | 24.10.2006 16:41 |
| Passwort und Name als Input Vorgabe | ex³ | PHP-Programmierung | 22 | 07.02.2006 17:55 |
| HTML in HTML einbinden | mr1st | HTML, XML und CSS | 3 | 14.01.2006 16:19 |
| include -> html -> php/html | Julied64 | PHP-Programmierung | 2 | 03.09.2005 12:35 |
| HTML Code im Frame darstellen ? | tuxsymptom | Desktop-Applikationen und Grafik | 5 | 03.01.2005 19:42 |