Pretty URL in CMS Made Simple

In der Standardinstallation des Open Source Content Managment Systems CMS made Simple werden URLs mit einem Query String erzeugt. Die sehen dann z.B. so aus: http://www.domainname.ch/index.php?page=Kontakt

Um suchmaschinenfreundliche URLs (Pretty URLs) zu erzeugen, nutzt CMS made simple das Apachemodul mod_rewrite. Um dies zu aktivieren muss man in der Konfigurationsdatei config.php folgende Änderungen vornehmen:


#------------
#URL Settings
#------------
$config['url_rewriting'] = 'mod_rewrite';
#Endung der virtuellen Dateien
$config['page_extension'] = '.htm';
#Wenn die Seiten in einer Baumstruktur aufgebaut werden sullen (z.B. http://www.domainname.ch/parent/parent/childpage)
$config['use_hierarchy'] = true;
$config['query_var'] = 'page';

Im 2. Schritt passt man noch die .htaccess an:


Options +FollowSymLinks
RewriteEngine on
RewriteBase /

# ReWrite Rule für News-Feed
RewriteRule ^News/rss(.+)$ index.php?page=News/rss$1 [S=1]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ index.php?page=$1 [QSA]

# Beginn CMSMS Security Einstellungen.

# Directory Browsing abschalten
Options -Indexes

# Zugriff auf config.php verbieten.


order allow,deny
deny from all

# No sense advertising what we are running
ServerSignature Off

# Spambots nach User_agent aussperren
RewriteCond %{HTTP_USER_AGENT} ^.*Whacker.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailCollector [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*FileHound.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*TurnitinBot.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*JoBo.*$ [OR]
RewriteCond %{HTTP_USER_AGENT} ^.*adressendeutschland.*$
RewriteRule ^.* - [F]

# 1. unterbindet, das fremde Seiten geladen werden
RewriteCond %{QUERY_STRING} ^(.*)=http://(.*) [OR]

# 2. blockiert libwww (Ausgangspunkt für diverse Hackversuche)
RewriteCond %{HTTP_USER_AGENT} ^libwww [OR]

# Blockiert Skripte, die versuchen, base64 encodierten Unsinn via URL zu versenden
RewriteCond %{QUERY_STRING} base64_encode.*\(.*\) [OR]

# Blockiert Skripte, die einen a ********** Tag in der URL enthalten
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]

# Blockiert Skripte, die versuchen, PHP GLOBALS Variablen via URL zu ver‰ndern
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]

# Blockiert Skripte, die versuchen, eine _REQUEST Variable via URL zu ver‰ndern
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]

# END Optional Settings

PHP Shell – Linux Shell via PHP Script

Heute bin ich per Zufall über PHP Shell gestolpert. Bei der PHPShell handelt es sich um ein PHP]Script von Martin Geisler welche Webhosting-Kunden ohne SSH-Zugriff eine Shell-Ähnliche Oberfläche zur Verfügung stellt.

PHP Shell kann unter phpshell.sourceforge.net als .zip oder .tar.bz2 heruntergeladen werden. Die Installation ist denkbar einfach. Es müssen die zwei Files phpshell.php und config.php auf den Webserver übertragen werden. In der Datei config.php muss ein Benutzer angelegt werden, der auf die PHP Shell Zugriff hat. Um das Passwort des Benutzers zu verschlüsseln, gibt es zusätzlich die Datei pwhash.php. Die Datei pwhash.php aufrufen, Benutzername und Passwort eingeben und danach diese in die config.php einfügen.

pwhash.php

pwhash.php

Als zusätzlichen Schutz empfiehlt es sich auf jeden Fall das Verzeichnis in dem sich phpshell befindet mit einem anderen Namen zu benennen sowie per .htaccess vor unbefugtem Zugriff zu schützen.
Genutzt werden können die meisten nicht-interaktiven Programme, welche auf dem Webserver installiert sind und sich auch mit einer normalen Shell nutzen ließen. Interaktive Programme, wie Editoren (z.B. vim) können nicht genutzt werden. Hierfür gibt es jedoch eine Erweiterung der PHPShell von Tobias Unger welche von seiner Website downgeloaded werden kann.

phpshell

Wie auf dem PrintScreen oben zu erkennen ist, lassen sich mit PHPShell auch ohne Probleme Shellscripte aufrufen. In diesem Fall ein Backupscript das jeden Tag den Webspace auf einen externen FTP Server backupt.

jScrollPane

jScrollPane ist ein Plugin für jQuery um die Scrolleiste im Browser zu gestalten.

jScrollPane

jScrollPane

jScrollPane ermöglicht das ersetzen der Standard Vertikal-Scrolleisten des Browsers in einem Blockelement mit einem overflow:auto Style. Die ScrollPane kann sehr einfach über ein simples Stylesheet gesteuert werden. jQuery läuft in allen Browsern welche jQuery unterstützen. Unterstützt ein Browser jQuery nicht, werden die normalen Scrolleisten angezeigt.

Beispiele eines Einbaus ist z.B. hier zu finden:

www.klein-abend.ch

jScrollPane lässt sich sehr einfach einsetzen. Eingebunden wird es so:



Die Dateien dazu kann man auf der jScrollPane Seite herunterladen

Um jScrollPane für einen CSS Container zu aktivieren, muss folgender Code ins Template eingebaut werden:



#container muss mit dem Namen des entsprechenden CSS Containers eingebaut werden.

Danach kann in der jScrollPane.css Datei der Style entsprechend der Wünsche angepasst werden.

builder.yaml.de – CSS Templates einfach gemacht

bild-1

Vor kurzem habe ich den YAML Builder das erste Mal richtig benutzt. Absolut cool das Teil. Einfacher lässt sich ein valides CSS Grundgerüst nicht erstellen.

Einziger Wehmutstropfen. Auch der Builder ist nur für fortgeschrittene User benutztbar. Ohne Kentnisse der Materie,  hat der User keine Ahnung was er genau macht und wie er das „fertige“ Template bearbeiten kann.

Browsershots – PrintScreens einer Webseite mit verschiedenen Browsern

Statt jede Menge verschiedene Browser zu installieren um eine Webseite zu testen, reichen in der Regel drei verschiedene Browser. Z.B. IE7, Firfox und Safari und Mac. Für alle restlichen Browser gibt es Angebote wie z.B. Browsershots.org:

http://browsershots.org/

Hier lassen sich mit Angabe einer URL PrintScreen von über 50 verschiedenen Browsern mit 3 verschiedenen Betriebssystemen herunterladen. Es werden Windows, Linux und Mac unterstützt.

Barrierenfreiheit

Auf dem Namics-Blog gab es vor kurzem einen Beitrag über die Barrierefreiheit von Webseiten. Um Einschränkungen der Nutzer selber erfahrbar zu machen, konnten die Behinderungen von Nutzern mit einem speziellen Anzug simuliert werden.

So erschwert der Anzug etwa das Strecken der Arme und Bandagen behindern das Beugen der Ellbogen und Knie. Durch zusätzliche Gewichte und Gehörschutz wird die Testperson weiter eingeschränkt. Durch eine Brille und einen Helm mit orangem Visir wird die Sehstärke minimiert und das Gesichtsfeld verkleinert.

Durch die so demonstrierten Einschränkungen konnte sich jeder Entwickler von der Notwendigkeit einer Barrierenfreiheit von Internetseiten und weiteren Angeboten überzeugen lassen.

barrierenfreiheit

Zum Blog Eintrag von Namics.

YAML – Yet Another Multicolumn Layout

YAML ist ein praktisches CSS Framework zur mehrspaltige CSS Seiten. Für diverse CMS System gibt es fertige Vorlagen die direkt integriert werden können. So z.B. für Typo3, Joomla aber auch CMS Made Simple.

Im Moment bin ich daran basierend auf diesem Framework eine Webseite zu erstellen. Absolut praktisch dieses Teil.

Alle Informationen zu YAML finden sich auf www.yaml.de

Für Bücherwürmer gibt es zu YAML auch ein Buch zu kaufen in dem der Aufbau des CSS Frameworks beschrieben ist.

PHP ausführliches Error Reporting

Der erste Schritt um eine PHP Anwendung abzusichern ist das aktivieren eines Features zum loggen der Anwendungsfehler. Anwendungsfehler geben oft Rückschlüsse auf die Angreifbarkeit der Anwendung.
Beispiel: Viele der register global ähnlichen Fehler können einfach entdeckt werden wenn man das Error-Report Level erhöht.

Hier der Code zum dies zu machen:

error_reporting(E_ALL | E_STRICT); // in PHP 4.x E_ALL
ini_set("display_errors", 0);
ini_set("log_errors", 1);
ini_set("error_log", "/home/user/logs/app_xyz.php.log");

Die erste Linien ist zum aktivieren des Loggings aller Errors. (E_ALL in PHP 4.0 oder E_ALL | E_STRICT in PHP 5.0 and höher) Sie zeigen alle Warnungen, Fatal Error, und informationen über alle nicht initialsierten Variablen. Die zweite Linie deaktivert das zeigen der Fehler.

Um dieses Logging zu aktivieren, muss der obenstehende Code nur in den Kopf der entsprechenden PHP Applikation kopiert werden.