Home
Navigation
Impressum
Coder Welten - Programmierung und Optimierung
Script für einen sicheren Feedreader mit SimpleXML

Zum Auslesen von RSS- und Atom-Feeds und zum Parsen von CDATA-Abschnitten

HM-Feedleser (Allgemeines und Beschreibung der Release-Versionen 1.04 bis 1.06)

Vorstellung und Beschreibung des Scripts:

  1. Feedreader mit SimpleXML (Einführung und Vorstellung eines Scripts für einen sicheren Feedreader...)
  2. Feedreader File (Einzelheiten zum Code - Variante mit file_get_contents)
  3. Feedreader mit cURL (Code mit der cURL-Variante und ergänzende Hinweise)
  4. Zugehörige Dateien (Formular, Formular-Klasse und eine CSS-Dateie)
  5. Variante mit Feed-Klasse (zur leichteren Einbindung in HTML-Seiten, Version 1.06)
  6. Feed-Klasse und Methoden (nur für HM-Feedleser ab Version 1.06)
  7. Plugin für WordPress (Feedreader als Plugin für WordPress, Version 1.08)

Vorbemerkungen

Es ist beinahe eine Selbstverständlichkeit, dass zum Funktionsumfang neuzeitlicher Content Management Systeme (CMS) eine Möglichkeit zur Bereitstellung von RSS- oder Atom-Feeds gehört und sei es nur, dass diese Möglichkeit durch ein zusätzliches Plug-In realisiert wird. Gleich ob es sich um Online-Magazine, Blogs oder sonstige Websites handelt, zu einem abgerundeten Online-Angebot gehören oftmals Newsfeeds.
Wie und in welchem Format diese Newsfeeds generiert werden, hängt hingegen nicht nur von den jeweiligen Anbietern ab, sondern von der verwendeten Software, welche die Anbieter zur Generierung der Newsfeed benutzen, wobei die Bereitstellung von mit HTML-Tags oder CSS formatierten Content in CDATA-Abschnitten eine gängige Praxis ist.
Wer nur Newsfeeds liest, braucht sich über die Bereitstellung und über die verwendeten Formate keine Gedanken zu machen. Völlig anders sieht es hingegen bei Webmastern aus, die einen Feedreader in ihr eigenes Webangebot integrieren möchten, dabei auf Newsfeeds aus unterschiedlichen Quellen zugreifen. Wer dabei einen einfachen, selbstgebastelten Feedreader für RSS- oder Atom-Feeds benutzt und nur Newsfeeds aus vertrauenswürdigen Quellen ausliest, um diese in einer seiner Webseiten zu laden, wird nur selten, unter Umständen nie Probleme bekommen. Er wird selbst dann kaum mit ernsthaften Problemen rechnen müssen, wenn er sich gar keine Gedanken betreffend der Sicherheit macht.

Dennoch sollte eigentlich bei allen selbstgeschriebenen Scripts die Sicherheit nie vernachlässigt werden und so praktisch CDATA-Abschnitte für die Anbieter und Bereitsteller von Newsfeed auch sein mögen, ebenso einfach ermöglichen diese Abschnitte die Einschleusung von Schadcode, zumal keine Absicherung der Ausgabe mit htmlspecialchars oder htmlentities möglich ist, ohne HTML-Tags sichtbar anzuzeigen. Falls es sich dann bei einem Anbieter von Feeds um ein schwarzes Schaf handeln sollte, könnte dieser diese Schwach­stelle ausnutzen.

Funktionsweise

Es sei bemerkt, eine hundertprozentige Sicherheit für Webanwen­dungen gibt es nicht und wer auf der Suche nach Schwachstellen ist, wird möglichweise fündig. Was jedoch nicht bedeutet, dass ein Programmierer eine Anwendung nicht absichern sollte. Für die Ausgabe von HTML haben sich dabei die PHP-Funktionen htmlspecialchars und htmlentities bewährt.
Um nun mit HTML-Tags formatierten Hypertext bei der Ausgabe mit htmlspecialchars absichern zu können, werden in den vorgestellten Scripts (Versionen 1.04 bis 1.06) zuerst alle erlaubten HTML-Tags in BBCode umgewandelt und HTML-Tags, die nicht für eine Umwandlung und Ausgabe vorgesehen sind, entfernt. Bei der eigentlichen Ausgabe erfolgt zuerst eine Absicherung der Ausgabe mit htmlspecialchars, an der sich in einem zweiten Schritt die Zurückverwandlung der erlaubten Tags von BBCode in HTML-Tags anschließt.

Weiterhin findet eine Überprüfung von Linkverweisen auf unerlaubte Zeichen und eine Überprüfung von in CDATA-Abschnitten referenzierten Grafiken auf Vorhandensein statt, wobei nur Images mit dem MIME-Typ JPG oder PNG erlaubt werden. Zusätzlich werden übergroße Grafiken auf ein durch den Anwender vorzugebenes Maß skaliert.

Verwendung und Lizenz

Die Web-Adresse eines Feeds sollte im editierbaren Bereich vorgewählt werden. Weitere Feeds können durch Eingabe der URL aufgerufen werden, insoweit das zum Funktionsumfang des Scripts gehörende Formular eingeblendet wird.

Wir raten aus Sicherheitsgründen jedoch dazu, das Formular nur bei der Erprobung einzublenden, bei der Veröffentlichung im Internet hingegen auszublenden. Nur so ist sichergestellt, dass Unbefugte keine Feeds aus fragwürdigen Quellen aufrufen können. Die Ein- und Ausblendung des Formulars erfolgt, in dem der Variablen $formu ein entsprechender boolescher Wert zugewiesen wird, bzw. in dem die Variable mit true oder false initialisiert wird.

Das Script kann entsprechend der den Zip-Archiven beiliegenden Lizenz und den daraus hervorgehenden Lizenzbedingungen frei für private Websites und Webprojekte und bedingt in kommerziellen Webprojekten und Applikationen verwendet werden, insofern ein Quellenvermerk gut sichtbar als Linkverweis gesetzt wird. Nähere Einzelheiten entnehmen Sie bitte der Lizenz. Unsere Lizenz ist ein­sehbar unter:

» Lizenz für Software

Ein lokaler Einsatz des Scripts ist ebenso möglich, wie eine Einbindung in kleinere oder größere Webprojekte.

Umfang, Versionen und Varianten

Der HM-Feedleser liegt seit Anfang Juni 2013 in der Release-Version 1.0 vor (Release: fertige Version) und in mehreren Varianten. Die Varianten unterscheiden sich jedoch nur dadurch, dass bei den etwas einfacheren Varianten die Feeddateien mit Hilfe der PHP-Funktion file_get_contents geladen werden, bei den anderen Varianten die Initialisierung einer Verbindung hingegen mit Hilfe von cURL realisiert wird.
Weiterhin wurde die PHP Version berücksichtigt, so dass bei den Varianten für PHP 5 bis 5.3 statt anonymer Funktionen, wie bei function ($bilder) und innerhalb der Funktion preg_replace_callback, create_function() benutzt wurde. Die Funktionalität der Varianten ist hingen gleich. Vor dem Download sollten Sie sich jedoch informieren, welche PHP Version Ihnen innerhalb Ihres Webspaces zur Verfügung steht.

Code der zum HM-Feedleser gehörenden Dateien:

Download »

Neuste Version » Zum leichteren Einbinden in bestehende Webseiten wurden bei dieser Version die Funktionen zu einer Klasse vereint und ausgelagert »

Feedleser 1.06 (PHP Version ab 5.3)

Weitere Versionen »

Feedleser 1.04 (PHP Version ab 5.3 mit file_get_contents)
Feedleser 1.04 (PHP Version ab 5.3 mit cURL)

Feedleser 1.04 (PHP 5 Version kleiner 5.3 mit file_get_contents)
Feedleser 1.04 (PHP 5 Version kleiner 5.3 mit cURL)

Als Plugin für WordPress »

Feedleser 1.08 (PHP Version ab 5.3 / Plugin für WP)


***


Copyright © Verlag Horst Müller - Stendal - 2006 - Impressum - Datenschutz - Nutzungsbedingungen