email-obfuscation.php
Email-obfuscation bootstrap: content-filter mode and full-page-buffer mode.
Table of Contents
Functions
- creationell_captcha_register_email_obfuscation() : void
- Registers email obfuscation on `init`. The decoder script is always registered; then, unless the kill-switch is set or the feature is off, the configured mode is wired up — the content filters (module 7) or the full-page output buffer (module 8).
- creationell_captcha_register_email_buffer() : void
- Wires up the full-page-buffer mode: on `template_redirect` for non-feed front-end requests it enqueues the decoder script and starts an output buffer whose callback obfuscates the page body at flush time.
- creationell_captcha_email_buffer_filter() : string
- The buffer callback itself: decides whether this response gets rewritten and hands it to the obfuscator when it does.
- creationell_captcha_response_is_html() : bool
- Whether the response being buffered is (still) an HTML document.
Functions
creationell_captcha_register_email_obfuscation()
Registers email obfuscation on `init`. The decoder script is always registered; then, unless the kill-switch is set or the feature is off, the configured mode is wired up — the content filters (module 7) or the full-page output buffer (module 8).
creationell_captcha_register_email_obfuscation() : void
creationell_captcha_register_email_buffer()
Wires up the full-page-buffer mode: on `template_redirect` for non-feed front-end requests it enqueues the decoder script and starts an output buffer whose callback obfuscates the page body at flush time.
creationell_captcha_register_email_buffer(EmailObfuscator $obfuscator) : void
Der Callback fasst den Puffer nur an, wenn die Antwort HTML ist (EO-5) und
eine Größengrenze nicht überschreitet (EO-4). Beides schützt fremde
Antworten davor, umgeschrieben zu werden, und verhindert, dass der
Obfuskator für eine sehr große Antwort eine zweite Kopie im Speicher
aufbaut. Was beides NICHT verhindert: dass PHPs Ausgabepuffer die Antwort
überhaupt zwischenspeichert. Ein Handler, der eine große Datei per
readfile() ausgibt, ohne die offenen Puffer vorher zu leeren, hält sie so
oder so komplett im Speicher — das ist eine Eigenschaft von ob_start()
und trifft jeden Puffer auf der Seite, nicht nur diesen.
Kein creationell_captcha_request_bypassed() (EO-10, bewusst): Die
Obfuskation ist kein Zugangs-Gate, sondern eine Darstellungsänderung — sie
lässt niemanden durch und hält niemanden auf. Der Content-Filter-Modus
fragt den Bypass ebenso wenig ab; ihn nur hier zu verdrahten, hieße, aus
einer Einstellung zwei Verhaltensweisen zu machen, je nach gewähltem Modus.
Funktionaler Schaden entsteht nicht: der Decoder stellt die Adresse
clientseitig wieder her.
Parameters
- $obfuscator : EmailObfuscator
-
The obfuscator.
creationell_captcha_email_buffer_filter()
The buffer callback itself: decides whether this response gets rewritten and hands it to the obfuscator when it does.
creationell_captcha_email_buffer_filter(string $html, EmailObfuscator $obfuscator) : string
Bewusst eine eigene benannte Funktion statt einer Closure im ob_start():
Die beiden Weichen (EO-5 Content-Type, EO-4 Größengrenze) sind der Fix, und
ein Test muss sie direkt aufrufen können. In der Closure waren sie nur über
einen echten Request erreichbar — der einzige „Nachweis", der dann noch
möglich war, prüfte den Default-Wert gegen sich selbst und wäre auch ohne die
Weiche grün geblieben.
Parameters
- $html : string
-
Der gepufferte Antwort-Body.
- $obfuscator : EmailObfuscator
-
The obfuscator.
Return values
string —Umgeschriebener oder unveränderter Body.
creationell_captcha_response_is_html()
Whether the response being buffered is (still) an HTML document.
creationell_captcha_response_is_html() : bool
EO-5: process_page() prüfte nie den Content-Type. Eine Nicht-HTML-Antwort,
die zufällig <body…>, </body> und ein „@" enthielt — etwa ein von einem
Mu-Plugin auf template_redirect ausgegebenes JSON mit HTML-Fragment —,
wurde umgeschrieben und war danach kaputt.
Ein fehlender Content-Type gilt als HTML: template_redirect ist der
Template-Pfad von WordPress, dessen Antwort per Definition das Theme rendert,
und PHPs default_mimetype ist text/html. Die Prüfung entscheidet
ausschließlich darüber, OB umgeschrieben wird — sie ist keine
Sicherheitskontrolle, und ein „nein" ist immer die harmlosere Antwort.