Kategorie: Coding

WordPress REST-API deaktivieren reloaded

WordPress Logo

Vor einigen Jahren habe ich in einem Artikel aufgezeigt, wie ihr die WordPress REST-API deaktivieren könnt. Die damals vorgestellte Methode verändert die REST-API so, dass diese nur noch von angemeldeten Benutzern verwendet werden kann. Grundsätzlich eine gute Idee, da WordPress seit einigen Jahren im Core vermehrt auf die REST-API setzt und somit diese Funktionalität erhalten bleibt.

Problematisch bei dieser Variante ist, dass mittlerweile auch immer mehr Plugins von der REST-API abhängig sind und diese dann nicht mehr funktionieren. Beispielsweise gibt es Probleme mit Contact Form 7, Analytics Germanized for Google Analytics und vielen weiteren Plugins.

Ein besserer Ansatz ist daher nur die standardmäßig von WordPress verwendeten REST-API-Endpoints für nicht angemeldete User zu deaktivieren. Alle anderen Third-Party-Endpoints von Plugins funktionieren dann nach wie vor. Alles was ihr tun müsste ist folgenden Code in die “functions.php” eures Themes bzw. Child-Themes einzufügen:

/* ------------------------------------------------------------------------- *
* Disable some REST API endpoints for unauthenticated users
/* ------------------------------------------------------------------------- */
add_filter( 'rest_endpoints', 'disable_default_endpoints' );
function disable_default_endpoints( $endpoints ) {
    $endpoints_to_remove = array(
        '/oembed/1.0',
		'/wp-site-health',
        '/wp/v2',
        '/wp/v2/media',
        '/wp/v2/types',
        '/wp/v2/statuses',
        '/wp/v2/taxonomies',
        '/wp/v2/tags',
        '/wp/v2/users',
        '/wp/v2/comments',
        '/wp/v2/settings',
        '/wp/v2/themes',
	'/wp/v2/plugins',
        '/wp/v2/oembed',
        '/wp/v2/posts',
        '/wp/v2/pages',
	'/wp/v2/block-directory',
	'/wp/v2/block-renderer',
	'/wp/v2/block-types',
	'/wp/v2/blocks',
        '/wp/v2/search',
        '/wp/v2/categories'
    );

    if ( ! is_user_logged_in() ) {
        foreach ( $endpoints_to_remove as $rem_endpoint ) {
            // $base_endpoint = "/wp/v2/{$rem_endpoint}";
            foreach ( $endpoints as $maybe_endpoint => $object ) {
                if ( stripos( $maybe_endpoint, $rem_endpoint ) !== false ) {
                    unset( $endpoints[ $maybe_endpoint ] );
                }
            }
        }
    }
    return $endpoints;
}

Bei Bedarf kann das Array “$endpoints_to_remove” selbstverständlich ergänzt werden.

Eine Liste aller aktiven Endpoints erhaltet ihr mit diesem Link: http://www.MEINESEITE.de/wp-json/

Kategorien: Coding Wordpress

Die Sicherheitslücken von JavaScript: Fremdcodes und Bibliotheken

JavaScript-Bibliotheken sind unbestreitbar praktisch, doch ihre Sicherheit wird oft fahrlässig gehandhabt. Dabei gibt es ein paar simple Regeln, die man befolgen sollte, um seine Webseite vor Cyberattacken zu schützen.

JavaScript bietet vielfältige Möglichkeiten, dynamische und interaktive Webseiten-Inhalte zu kreieren. Im Laufe der Zeit hat sich die einst recht simple Skriptsprache an die gängigen Programmiersprachen angenähert und ist dadurch unweigerlich komplexer geworden. Zum Glück gibt es ja die zahlreichen JavaScript-Bibliotheken für nahezu jeden Zweck, in denen geübte Coder die am häufigsten verwendeten Funktionen und Anweisungen zusammengefasst haben – ein Segen für Einsteiger und diejenigen, die regelmäßig am DOM verzweifeln.

Was viele Webseiten-Designer und -betreiber aber gerne vergessen, ist die Tatsache, dass diese hilfreichen Programmierwerkzeuge auch das größte Sicherheitsproblem von JavaScript darstellen. Denn jeder Code, den man nicht selbst geschrieben hat, kann versehentliche oder gar beabsichtigte Fehlerstellen enthalten, die sich Hacker für Cyberangriffe zunutze machen können.

Vernachlässigte Problematik

Wie ernst das Problem ist, enthüllten im März dieses Jahres sechs Wissenschaftler von der Northeastern University of Boston in einer Studie: Von 133.000 untersuchten Webseiten verwendeten knapp 38% mindestens eine als verwundbar geltende JavaScript-Bibliothek, 10% sogar zwei oder mehr. Im Jahr 2014 hatte es bereits eine ähnliche Studie gegeben – mit noch schlechteren Ergebnissen.

Jüngste Ereignisse zeigen, wie problematisch sogenannter “third party code” für die Webseiten-Sicherheit sein kann. Im angefügten (englischsprachigen) YouTube-Video demonstriert Guy Podjarny von der Firma Snyk anschaulich einige solcher “vulnarability exploits” aus der realen Welt und macht damit deutlich, dass bereits kleinste Veränderungen des Codes ausreichen, um eine Webseite angreifbar zu machen.

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

Was man als Programmierer tun kann

Leider existieren bislang keine einheitlichen Datenbanken für Sicherheitslücken in JavaScript-Bibliotheken. Das ist besonders problematisch, wenn man bedenkt, dass zum Beispiel das vielseitig einsetzbare jQuery 37% der Sicherheitslücken in der genannten Studie ausmachte. Der Liebling eines jeden Coders und seine dazugehörige Erweiterung UI werden nämlich in vielen Webseiten verwendet, die mit weit verbreiteten CMS wie etwa WordPress programmiert wurden. jQuery Version 1 ist immer noch mit Abstand auf häufigsten im Einsatz, Version 2 und 3 werden kaum benutzt.

jQuery Versionsverteilung

jQuery Versionsverteilung (Quelle: W3Techs)

Das Bundesamt für Sicherheit in der Informationstechnik gibt zu diesem Thema ein paar Empfehlungen ab, die im Folgenden kurz zusammengefasst werden:

  • Drittanbieter-Bibliotheken weisen gemäß Studie tendenziell mehr Sicherheitslücken auf, da sie veränderten Code enthalten können, vor allem wenn sie aus vertrauensunwürdigen Quellen heruntergeladen werden. Es ist also empfehlenswert, die Reputation einer ausgewählten Seite vor dem Download zu überprüfen und im Zweifelsfall sämtliche Funktionen der Bibliothek selbst auszutesten.
  • Bei vielen der untersuchten Bibliotheken lag die letzte Software-Aktualisierung im Durchschnitt drei bis vier Jahre zurück! Dabei sind regelmäßige Updates eine unabdingbare Voraussetzung in jedem Aspekt der Webseiten-Security.
  • Es gilt die Faustregel: Je mehr Codes vorhanden sind, desto größer ist die Fehleranfälligkeit. Jedoch werden durchschnittlich 50% der Funktionen von „multipurpose libraries“ gar nicht verwendet. Man sollte sich also darüber klarwerden, welche Funktionen man wirklich benötigt, und im Anschluss gründlich ausmisten.
  • Egal, wie praktisch und bewährt sie sein mögen – veraltete Bibliotheken wie SWFObject erfahren schon lange keinen Support mehr und sollten deshalb gänzlich gemieden werden. Nicht umsonst verfielen beispielsweise 87% der Sicherheitslücken in der genannten Studie auf die Bibliothek YUI, von der keine aktuelle Version mehr existiert.

Javascript Code

Kategorien: Coding Internet

WordPress REST-API deaktivieren

WordPress Logo
Diese Methode ist mittlerweile nicht mehr zu empfehlen, da viele Plugins ebenfalls auf die REST-API setzen und dann teilweise nicht mehr funktionieren. Hier gehts zur neuen Methode: WordPress REST-API deaktivieren reloaded

Die WordPress REST-API ist ein spannendes Thema. Grundsätzlich soll die API eine einfach zu erweiternde Schnittstelle für die Kommunikation mit anderen Programmen bereitstellen. Mit WordPress Version 4.4 wurde die grundlegende REST-API-Infrastruktur in den WordPress-Core integriert. Die gestern veröffentlichte Version 4.7 integriert sogenannte Inhalts-Endpunkte, welche bisher nur über ein separates Plugin vorhanden waren. Durch die Endpoints können andere Programme mit WordPress interagieren und bestimmte Informationen ein- oder auslesen.

Die REST-API ist unter der URL “http://www.meine-seite.de/wp-json/” erreichbar. Das Auslesen der Artikel ist beispielsweise folgendermaßen möglich: “https://www.meine-seite.de/wp-json/wp/v2/posts”.

Wer eine Webseite mit WordPress betreibt und die REST-API nicht nutzt, möchte die API vielleicht lieber deaktivieren. Die API komplett zu deaktivieren ist keine gute Idee, da mittlerweile immer mehr Funktionen im Backend die REST-API benötigen. Allerdings lässt sich die API so umbiegen, dass sie nur von angemeldeten Benutzern verwendet werden kann. Dies ist relativ einfach möglich und erfordert nur ein paar Zeilen Code, die in der “functions.php” eures Themes bzw. Child-Themes eingefügt werden müssen.

/* ------------------------------------------------------------------------- *
* Returning an authentication error if a user who is not logged in tries to query the REST API
/* ------------------------------------------------------------------------- */
function only_allow_logged_in_rest_access( $access ) {
    if( ! is_user_logged_in() ) {
        return new WP_Error( 'rest_API_cannot_access', 'Only authenticated users can access the REST API.', array( 'status' => rest_authorization_required_code() ) );
    }
    return $access;
}
add_filter( 'rest_authentication_errors', 'only_allow_logged_in_rest_access' );

remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );

Die unteren drei Zeilen sorgen dafür, dass der Ausgangspunkt der REST-API nicht im Quellcode, Header und unter der XMLRPC-Schnittstelle publiziert wird.

In den Kommentaren wurde ich darauf hingewiesen, dass Contact Form 7 ab Version 4.8 bei deaktivierter REST-API nicht mehr richtig funktioniert. In diesem Fall kann aber auf das Plugin “Disable REST API” zurückgegriffen werden, welches das Whitelisting bestimmter Routen erlaubt. Damit können dann die für Contact Form 7 benötigten Routen erlaubt werden, während alles andere deaktiviert ist.

Kategorien: Coding Wordpress

Amazon Web Services Tutorials

Unter dem Namen Amazon Web Services (AWS) bietet der weltbekannte Internetshop eine Sammlung verschiedener Webservices als Cloud-Lösung an. Viele Entwickler setzen auf die recht günstigen und vor allem zuverlässigen Dienste von Amazon.

In seinem Amazon Web Services Blog hat der Internetriese nun eine Übersicht mit Artikeln, Tutorials und Videos zusammengestellt, die im Jahr 2012 veröffentlicht wurden. Ein Muss für Cloud-Entwickler und welche, die es noch werden wollen.

Kategorien: Coding Internet

Mit w3af Webseiten auf Schwachstellen untersuchen

Das “Web Application Attack and Audit Framework” (w3af) ist ein kostenloses Tool, um Webseiten auf Sicherheitslücken und Schwachstellen zu untersuchen. Beispielsweise kann mit w3af SQL-Injection, Remote File Inclusion und Cross-Site-Scripting (XSS) getestet werden. Das Tool ist in Python geschrieben und kann sowohl per Kommandozeile, als auch mit einer grafischen Benutzeroberfläche bedient werden. w3af ist modular aufgebaut und beinhaltet mehr als 130 Plugins. Die integrierte Updatefunktion hält das Programm immer auf dem aktuellsten Stand.

Download w3af
w3af GUI

Tutorial Kommandozeile

Nachfolgend eine kurze Anleitung, wie eine Webseite mit w3af untersucht werden kann und die Ergebnisse als HTML-Datei ausgegeben werden.

  1. Zuerst muss das Ziel definiert werden.
    w3af>>> target
    w3af/config:target>>> set target http://localhost
    w3af/config:target>>> back
  2. Jetzt müssen die gewünschten Plugins ausgewählt werden. In meinem Beispiel nutze ich je zwei Plugins aus dem audit- bzw. discovery-Bereich. Außerdem definiere ich HTML als Ausgabeformat für die Ergebnisse.
    w3af>>> plugins
    w3af/plugins>>> audit htaccessMethods buffOverflow
    w3af/plugins>>> discovery phpinfo serverHeader
    w3af/plugins>>> output htmlFile
    w3af/plugins>>> back
  3. Anschließend wird der Scan gestartet.
    w3af>>> start
  4. Die Ergebnisse werden in der Datei “report.html” gespeichert. In Windows ist die Datei unter dem Pfad “C:\Programme (x86)\w3af\w3af” zu finden.

Durch die vielen verfügbaren Plugins lassen sich auch deutlich komplexere Untersuchungen durchführen. Eine genaue Erklärung würde jedoch die Länge des Artikels sprengen.

Java – was sind Filter und Listener?

Wer sich mit Webprogrammierung in Java beschäftigt, wird früher oder später auf die Begriffe Filter und Listener stoßen. Ich möchte euch ganz kurz erklären, wobei es sich darum handelt.

Filter

Filter werden bei jedem Request vor und nach dem Servlet durchlaufen und können auf die Werte des Requests und der Response zugreifen und diese auch verändern. Dabei können mehrere Filter hintereinander geschaltet werden, die dann eine Filterkette bilden.

Anwendungsbeispiele:

  • Logging (welche Ressource wurde angesprochen, wie lange hat die Bereitstellung der Ressource gedauert)
  • korrektes Encoding für einen Request festlegen
  • Request entschlüsseln, Response verschlüsseln
  • Response komprimieren (deflate, gzip)
  • Transformation von XML mit Hilfe von XSLT

Listener

Listener sind Programmteile, die bei bestimmten Ereignissen automatisch aufgerufen werden.

Anwendungsbeispiele:

  • aktive Sessions verfolgen
  • herausfinden, wenn ein Attribut an eine Session gebunden wird

Kategorien: Coding

Basis Theme für WordPress

Es existieren verschiedene Möglichkeiten ein eigenes Themes für WordPress zu entwickeln. Vom komplett eigenen Aufbau über die Verwendung von Frameworks und die Modifikation bestehender Themes, ist so gut wie alles möglich. Eine sinnvolle Alternative ist das WordPress Basis Theme.

Wie der Name schon vermuten lässt, stellt das Basis Theme ein schlankes Grundgerüst für einen einfachen Start bereit. Die Vorlage lässt sich leicht den eigenen Bedürfnissen anpassen und bietet auch schon einige wichtige Grundfunktionen.

Das Basis Theme wird regelmäßig aktualisiert und ist bereits in HTML5 verfasst. Auch CSS3 Media Queries, um das Design automatisch auf mobile Endgeräte anzupassen, sind bereits definiert.

Download WordPress Basis Theme (automatisch die aktuellste Vesion)
Homepage des WordPress Basis Theme

Kategorien: Coding Wordpress

RailsInstaller 2 für Windows

Vor ein paar Monaten habe ich beschrieben, wie ihr Ruby on Rails 3 unter Windows von Hand installieren könnt.

Mittlerweile ist Version 2 des RailsInstallers erschienen. Im Regelfall würde ich das Tool der manuellen Installation von Ruby on Rails 3 vorziehen. Neben dem Update auf Ruby 1.9.2 ist in der neuen Version auch bereits Rails 3.1 enthalten. Außerdem ist TinyTDS enthalten, wodurch mittels FreeTDS eine MSSQL-Datenbank genutzt werden kann. Alternativ kann auch das integrierte SQLite in Version 3.7.3 verwendet werden.

Download RailsInstaller

Java 7: Verbesserungen an der Programmiersprache

Nach mehr als fünf Jahren Entwicklungszeit erschien vor kurzem Java in Vesion 7. Insgesamt enthält die neue Version rund 9.500 Verbesserungen. Nachfolgend eine Liste der wichtigsten Neuerungen:

  • neue API für Dateisystem-Operationen (NIO.2)
  • neue API für Multi-Core-Systeme
  • neuer Garbage Collector (G1)
  • verbesserten Unterstützung von dynamischen Programmiersprachen (Ruby, Python und Javascript)
  • Unterstützung von Unicode 6.0
  • Überarbeitung zahlreicher Bibliotheken

Eine detaillierte Übersicht aller Neuerungen findet ihr in den Release Notes.

Programmieren in Java soll leichter werden

Zu den oben genannten großen Änderungen kommen noch einige kleinere Verbesserungen, die vor allem das Programmieren in Java erleichtern sollen. Nachfolgend ein paar Beispiele.

Numerische Literale lassen sich nun neben der dezimalen (36), hexadezimalen (0x24) sowie oktalen (044) auch in der binären (0b100100) Schreibweise definieren.

[sourcecode language=”java”]public static final float PI = 3.141592f;
int decimal = 36;
int hex = 0x24;
int octal = 044;
int binary = 0b100100;
[/sourcecode]

Zur besseren Lesbarkeit dürfen numerische Literale nun mit Unterstrichen versehen werden. Allerdings nicht am Anfang oder am Ende und an zweideutigen Stellen, wie beispielsweise vor oder nach dem “x” in der hexadezimalen Schreibweise. Der Compiler entfernt beim Parsen die Unterstriche.

[sourcecode language=”java”]int longBinary = 0b1001_0011_0110_1011;
int longHex = 0xAA33_BE41;
int million = 1_000_000;[/sourcecode]

Das Anlegen von Objekten mit generischen Parametern wurde durch die Einführung des Diamond-Operators (<>) erleichtert. Auf der rechten Seite muss die Zuweisung nicht mehr wiederholt werden. Dadurch spart man sich Tipparbeit und der Quellcode wird kürzer und übersichtlicher.

[sourcecode language=”java”]HashMap<String, List<Integer>> map = new HashMap<String, List<Integer>>();
HashMap<String, List<Integer>> map = new HashMap<>(); // kürzere Schreibweise
ArrayList<String> liste = new ArrayList<String>();
ArrayList<String> liste = new ArrayList<>() // kürzere Schreibweise;[/sourcecode]

Switch-Case-Anweisungen funktionieren ab Java 7 neben primitiven Datentypen nun auch mit Zeichenketten. Dabei wird der String im Switch-Ausdruck mit der Methode “equals” mit dem Case-Fall verglichen. Anschließend gibt er die entsprechende Zahl zurück.

[sourcecode language=”java”]public static int getDay(String day) {
int dayNumber = 0;
if (day == null) { return dayNumber; }
switch (day.toLowerCase()) {
case "montag": dayNumber = 1; break;
case "dienstag": dayNumber = 2; break;
case "mittwoch": dayNumber = 3; break;
case "donnerstag": dayNumber = 4; break;
case "freitag": dayNumber = 5; break;
case "samstag": dayNumber = 6; break;
case "sonntag": dayNumber = 7; break;
default: dayNumber = 0; break;
}
return dayNumber;
}[/sourcecode]

Bei den Exceptions gibt es nun die Möglichkeit mehrere Exceptions in einem Catch-Block zu fangen. Zwischen den verschiedenen Typen steht dann jeweils ein OR-Zeichen (|). Sehr hilfreich um eine Aneinanderreihung von Catch-Blöcken zu vermeiden.

[sourcecode language=”java”]
try{
// …
} catch (IOException e) {
System.out.println("Operation xyz fehlgeschlagen: " + e);
} catch (ParseException e) {
System.out.println("Operation xyz fehlgeschlagen: " + e);
}

try {
// …
} catch (IOException | ParseException e) {
System.out.println("Operation xyz fehlgeschlagen: " + e);
}[/sourcecode]

IE cached AJAX-Requests

Beim Test eines AJAX-Requests ist mir aufgefallen, dass dieser im IE nicht immer funktionierte. Nach kurzer Fehlersuche habe ich herausgefunden, dass der Internet Explorer AJAX-Requests ziemlich aggressiv cached. Bei jQuery gibt es die Möglichkeit das Caching für den AJAX-Aufruf explizit zu deaktivieren:

[sourcecode language=”javascript”]$.ajax({
url: "ajax.php",
type: "GET",
data: ({id : this.getAttribute(‘id’)}),
cache: false
}[/sourcecode]

Kategorien: Coding

PHP: cURL als Alternative für allow_url_fopen

Gestern bekam ich eine Mail von meinem Webhoster, dass ab sofort die aktuellste PHP-Version 5.3.6 zur Verfügung steht. Die neue Version ist nun direkt als Modul in Apache integriert, anstatt wie früher als CGI-Programm. Dadurch sollen sich spürbare Geschwindigkeitsverbesserungen ergeben. Tatsächlich muss ich sagen, dass mein Blog deutlich schneller lädt, vor allem der Admin-Bereich.

Allerdings wurde aus Sicherheitsgründen auch die Funktion “allow_url_fopen” standardmäßig deaktiviert. Damit funktioniert mein kürzlich vorgestelltes Skript zum RSS-Feeds auslesen leider nicht mehr. Den Code habe ich auch zum Anzeigen der “Hartware News” in der Sidebar ganz unten auf der Startseite verwendet. Also was tun? Zurück auf die alte PHP-Version und die bessere Performance herschenken? Nein, kommt nicht in Frage. Also musste mein Skript angepasst werden. War sogar deutlich einfacher als ich anfangs dachte.

Anstatt des bisherigen Codes zum Laden des RSS-Feeds

$xml =simplexml_load_file('http://www.hartware.net/xml/news.rdf

hier die Lösung mit cURL:

$url = "http://www.hartware.de/xml/news.rdf";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$xml_raw = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($xml_raw)

Kategorien: Coding Internet

MySQL Workbench – Datenbankdesign, Modellierung, Erstellung und Bearbeitung

MySQL Workbench ist eine umfangreiche Software für Entwickler und Datenbankadministratoren, welche unter anderem Datenbankdesign, Modellierung, Erstellung und Bearbeitung von MySQL-Datenbanken unterstützt. Die kostenlose “Community Version” von MySQL Workbench ist für Windows, Linux und Mac OS verfügbar. Unter Windows wird ein installiertes .NET Framework 4.0 von Microsoft benötigt.

Das letzte Mal habe ich die Software vor rund drei Jahren eingesetzt. Damals war MySQL Workbench noch ziemlich instabil und war auch sehr langsam. Seitdem hat sich viel getan. Die aktuellste Version wurde optisch komplett neu gestaltet und es kamen viele neue Funktionen hinzu. Auch die Stabilität und Performance ist mittlerweile auf einem ganz anderen Niveau. Wirklich geniale Software, die sich jeder anschauen sollte, der sie noch nicht kennt

Anbei noch zwei Screenshots, um die Möglichkeiten zu verdeutlichen.

Download MySQL Workbench

Burp Suite – abfangen und modifizieren von HTTP-Headern

Das kostenlose Java-Tool Burp Suite bietet verschiedene Möglichkeiten, um Web-Applikationen auf Sicherheitslücken zu überprüfen. Sehr interessant für selbst programmierte Skripte ist die integrierte Proxy-Funktionalität. Der interaktive HTTP(S)-Proxy schaltet sich zwischen Browser und Server. Somit kann der gesamte Datenverkehr untersucht, analysiert und modifiziert werden. Beispielsweise lassen sich HTTP-Header oder POST-Daten abfangen, ändern und anschließend an den Server weiterschicken.

Dazu muss lediglich Burp Suite gestartet und im Browser als Proxy “localhost” mit Port 8080 eintgetragen sein. Nun kann man die gewünschte Homepage ansurfen und die gesamte Kommunikation verfolgen bzw. ändern.

Download Burp Suite

PHP Benchmark-Klasse

In manchen Situationen kann eine kleine Benchmark-Klasse für PHP ganz sinnvoll sein. Beispielsweise kann man damit sehen, wie lange die Laufzeit bestimmter Codeabschnitte ist.
Hier die Klasse:

/**
 * Benchmark-Klasse um Laufzeit von PHP-Code zu überprüfen
 */

class Benchmark {
	private $starttime;
	private $stoptime;
	private $resulttime;

	public function start() {
		$this->starttime = microtime(true);
	}

	public function stop() {
		$this->stoptime = microtime(true);
	}

	public function result() {
		$this->resulttime = $this->stoptime-$this->starttime;
		return $this->resulttime;
	}
}

Hier noch eine kleine Erklärung, wie man die Klasse nutzt:


// Objekt erzeugen
$Benchmark = new Benchmark();

// Startzeit festlegen
$Benchmark->start();

// Endzeit festlegen
$Benchmark->stop();

// Laufzeit mit vier Nachkommastellen ausgeben
echo 'Laufzeit: '.number_format($Benchmark->result(),4).' sec.';

Kategorien: Coding

Webseite optimieren – HTTP-Requests reduzieren

Viele Webseiten besitzen oft lange Ladezeiten. Das kann mitunter viele Ursachen haben. Ein häufig augtretendes Problem ist aber, dass oft recht viele HTTP-Requests gemacht werden werden. Heutzutage benötigen größere Seiten locker 40 Requests und mehr.

Es muss für jedes Bild, jede JS- und CSS-Datei eine neue HTTP-Verbindung zwischen Browser und Server geöffnet werden. Da viele Browser oft nur 2-4 parallele HTTP-Requests zulassen, ist dies ein deutlicher Flaschenhals.

Um eine Beschleunigung des Ladevorgangs zu erreichen, könnte man nun entweder die Anzahl der parallelen Requests erhöhen oder die Anzahl der benötigten Requests verringern.

Eine recht einfache Lösung, um die Requests bereits als Developer niedrig zu halten, ist die Kombination von CSS- und JavaScript-Dateien. Auch nachträglich lassen sich mit entsprechenden PHP-Tools deutliche Performancezuwächse erziehlen.

Empfehlenswert ist vor allem minify. Es fügt alle CSS- und JavaScript-Dateien zu jeweils einer Datei zusammen. Beispielsweise hat man im Ursprungszustand drei CSS- und sieben JavaScript-Dateien eingebunden. minify macht daraus eine CSS- und eine JavaScript-Datei. Zusätzlich werden unnötige Leerzeichen und Tabs entfernt und die Dateien werden gzip-kodiert mit optimalen HTTP-Cache-Headern gesendet.
Den Download und eine Dokumentation zu dem Tool findet ihr direkt auf der minify-Homepage.

Kategorien: Coding Internet