dimis linkdump

Posts tagged ‘PHP’

Irgendwie muss man die tägliche Informationsflut im Internet organisieren. Dazu gibt es unterschiedliche Möglichkeiten: Twitter, Soziale Netzwerke, RSS,…

Ich persönlich habe mich für letzteres entschieden. Besonders geschickt ist dabei eben der Online-Reader von Google. Wenn täglich an 2-3 verschiedenen Rechnern sitzt, macht eine lokale Installation eines RSS-Reader keinen Sinn.

Perfekte Situation für Online-Reader, z.B. Google Reader.  Naja, muss aber nicht unbedingt der Google Reader sein. Es gibt durchaus Alternativen die sich sehen lassen können, eine davon will ich hier vorstellen:

Tiny Tiny RSS

Tiny Tiny RSS ist ein in PHP geschriebener RSS-Reader, den man auf seinen Webspace oder Server installiert und damit seine RSS-Feeds organisiert.

Die Datenübernahme aus dem Google Reader ist möglich. Dazu muss man im Google Reader einfach die Subscriptions als OMPL exportieren und im Tiny Tiny RSS importieren. Ob das so problemlos funktioniert, kann jeder selbst probieren.

Ich persönlich habe die die Gelegenheit genutzt und einige Blogs aussortiert.

Installation

Die Installation erfolgt (noch?) nicht in einer Installationsoberfläche, wie man von anderen großen Projekten vielleicht gewohnt ist. Um Tiny Tiny RSS zu installieren muss zuerst manuell eine Datenbank angelegt und dann das Schema der Datenbank hochgeladen werden. Dazu bietet Tiny Tiny RSS unter schema/ttrss_schema_mysql.sql oder ttrss_schema_pgsql.sql jeweils die fertigen Schemata jeweils für MySQL oder PostgreSQL.

Anschließend müssen die Datenbank-Verbindungsdaten in die config.php eingetragen werden:

define(‘DB_TYPE’, “pgsql”); // or mysql
define(‘DB_HOST’, “localhost”);
define(‘DB_USER’, “fox”);
define(‘DB_NAME’, “fox”);
define(‘DB_PASS’, “XXXXXX”);

Damit ist die Installation erledigt.

Debugging

Wer keine Kategorien im Tiny Tiny RSS nutzen will, oder bei wem das Erstellen von Kategorien schon funktioniert, kann diesen Schritt überspringen. Alle anderen müssen noch eine Zeile im Quellcode von Tiny Tiny RSS verändern.

Da TTRSS anfangs bei mir keine Kategorien erstellen wollte, habe ich mich auf die Suche nach dem Bug gemacht und bin auf folgendes gestossen:

In der Datei “modules/pref-feeds.php” in Zeile 1040 erfolgt eine Überprüfung ob sich die TTRSS-Installation im Demo-Mode befindet. Laut der Config-Datei ist diese Funktion aber schon hinfällig.

define(‘WEB_DEMO_MODE’, false);
// Demo mode with reduced functionality.
// Warning: this option is obsolete. Don’t rely on it being
// checked in all necessary places.

Eigentlich sollte diese Überprüfung keine Probleme verursachen.  Allerdings behebt das entfernen der Zeile (und der entsprechenden schließenden Klammer) den Bug.

Damit lassen sich dann im Administrationsmenü wie gewohnt Kategorien erstellen.

Die Kategorien sind standardmäßig nicht aktiviert und müssen in den Einstellungen unter “Feedkategorien aktivieren” aktiviert werden.

Konfiguration

Der wichtigste Konfigurationspunkt ist die automatische Abholung der Feeds. Dau habe ich einen Cronjob eingerichtet, der alle 10 Minuten läuft und die Feeds abholt.

Dazu einfach den Befehl

/usr/bin/wget –quiet –output-document=/dev/null “http://www.url-zum-reader.de/ttrss/backend.php?op=globalUpdateFeeds&daemon=1″

im Cronjob hinterlegen.

Andere Möglichkeiten die Feeds regelmäßig abzuholen bietet TTRSS unter http://tt-rss.org/redmine/wiki/tt-rss/UpdatingFeeds.

Abschließend noch einige Hinweise zu den Einstellungsmöglichkeiten. TTRSS bietet viele Features, die der Google Reader auch bietet.

1) Als gelesen markieren beim scrollen. Kann unter “Einstellungen = > Artikel automatisch als gelesen markieren” aktiviert werden.

2) Artikel veröffentlichen. TTRSS bietet die Möglichkeit Artikel mit und ohne Notiz für andere Leute zu veröffentlichen. TTRSS bietet dazu pro User  einen eigenen RSS-Feed für “Veröffentlichte Artikel” an. Unter jedem Artikel ist dazu ein RSS-Symbol bzw. ein Notizzettel-Symbol vorhanden.

3) Artikel starren. Wie im Google Reader ist es möglich Artikel vorzumerken um sie später zu lesen oder um sie später wieder leichter finden zu können. Dazu gibt es unter jedem Artikel einen entsprechenden Button. (Stern)

4) Multiusersupport abschalten

define(‘SINGLE_USER_MODE’, true);

fügt man in der config.php obige Zeile ein, schaltet man den Multiusersupport aus. Damit verschwindet auch die Passwortabfrage beim Aufruf des Readers.

(c)-Zeitung-Bild: Pixelio / Jetti Kuhlemann

Ein täglicher auf den ISC-Blog von SANS lohnt sich definitiv. Heute wurde auf dem ISC-Blog ein interessantes Skript, welches ein User auf einem Server gefunden hat, vorgestellt. Dieses Skript ermöglicht es über PHP eine verteile Bruteforce-Attake auf WordPress-Blogs durchzuführen.

Das Skript bedient sich dazu der Möglichkeit unter PHP cURL zu nutzen.

cURL:

A free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, FILE, LDAP and LDAPS. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more.

Wikipedia

wp-bruteforce1

Es wurde nicht das komplette Skript veröffentlicht, sondern nur einige Code-Snippets. Wer das Skript haben möchte, sollte schnell anfangen zu programmieren ;)

Im ersten veröffentlichten Screenshot erkennt man eine Funktion, die 3 verschiedene Parameter erwartet. $ch ist dabei der Handle, der durch curl_init() erstellt wurde. Das ist im Ausschnitt nicht zu sehen.  An diesen Handle werden nun alle erforderlichen Einstellungen angehängt und am Ende mittels curl_exec($ch) ausgeführt.

Parameter 2 und 3 ergeben sich logischerweise aus ihrem Namen.

Enthält die Antwort des Servers, also die zurückgelieferte Webseite, den Ausdruck “Log Out” war die Brute-Force Attacke erfolgreich. Das wird mittels

[...]

eregi(“Log Out”,$result)

[...]

überprüft.

Interessanter als die Nutzung von cURL in PHP ist die Möglichkeit, Seiten, die gecrackt werden sollen, in einer zentralen Instanz zu verwalten um verteiltes Cracken zu ermöglichen.

wp-bruteforce2

Zunächst holt sich das Skript aus einer zentralen MySQL-Datenbank 200 URLs, die gecrackt werden sollen und markiert diese in der Datenbank mit seiner persönlichen “colo_id”. Bricht das Skript nun aus irgendeinem Grund ab, holt sich das Skript die vorher markieren Einträge wieder aus der Datenbank und kann an der Stelle weitermachen, an der es abgebrochen wurde. Genau diesen Schritt stehen wir hier in diesem Screenshot:

Mittels “select url, site_type from site where colo_id=’$colo_id’” werden die Einträge aus der Datenbank geholt, an denen dieser “colo”, also dieses Skript, vorher gearbeitet hat.

Interessant ist auch die Möglichkeit, Passwortlisten zentral in einer Datenbank zu speichern und so allen Skripts zur Verfügung zu stellen.

Auf jeden Fall eine interessante und erwähnenswerte Idee, wie ich finde.

RSS-Feed Creative Commons License