Kategori PHP

WordPress Angriffe filtern

Montag, November 30th, 2015

Ich habe im August 2014 bereits eine Lösung mit iptables und fail2ban geschrieben. Da diese aber zu viele „fals positiv“ produziert hat, habe ich mich noch einmal hingesetzt und eine sowohl auf Performance als auch ohne fail2ban optimierte Lösung gesucht.

Mein zweiter Ansatz geht so vor, dass zuerst alle post requests in eine eigene iptbatles chain gepackt werden. Anschließen werden die in der chain noch übrig bleibenden anfragen nach den Schlüsselwörtern wie wp-login.php oder xmlrpc.php untersucht und mit einem Counter von 3 versehen. Beim dritten versuch ein falsches Passwort anzugeben werden die IPs der Botts für 600sec gesperrt.

iptables -A INPUT -p tcp --dport 80 -m string --algo bm --string "POST " -j HTTPPOST

iptables -A HTTPPOST -m string --algo bm --string "/wp-login.php" -m state --state NEW,ESTABLISHED -m recent --set --name "wp-auth"
iptables -A HTTPPOST -m string --algo bm --string "/wp-login.php" -m state --state NEW,ESTABLISHED -m recent --update --seconds 600 --hitcount 3 --name "wp-auth" -j DROP

iptables -A HTTPPOST -m string --algo bm --string "/xmlrpc.php" -m state --state NEW,ESTABLISHED -m recent --set --name "wp-xmlrpc"
iptables -A HTTPPOST -m string --algo bm --string "/xmlrpc.php" -m state --state NEW,ESTABLISHED -m recent --update --seconds 600 --hitcount 3 --name "wp-xmlrpc" -j DROP

iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT -m comment --comment "HTTP"

UPDATE: Danke an Jens, die SSL Regeln für Port 443 können so natürlich nicht funktionieren und wurden entfernt.

SimpleHTTPServer mit PHP

Dienstag, August 4th, 2015

Heute wollte ich mir mal eben schnell Vorschaubilder auf einem Server anzeigen lassen. Der PHP Code war schnell geschrieben:

read())) {
   echo " ".chr(10);
}

$d->close();
?>

Dann die Frage wie man ohne Webserever an die Daten harren kommt. Einfachste weg ist der in Python integrere Webserver:
python -m SimpleHTTPServer 8000

Diese kann aber kein PHP. Da php5-cli in der Version >= 5.4 installiert war funktionierte folgende spannende Lösung:
php -S 127.0.0.1:8000 -t .

Quelle: docs.python.org simplehttpserver, php.net commandline.webserver

PHP7 ein Test wert…

Samstag, Juli 18th, 2015

Aktuell ist die Beta1 von PHP7 veröffentlicht. Da Sie zum php5.2 abwärts kompatible ist funktioniert auch das meiste. Auf unterschiedlichen Seiten kann man sich jetzt schon Statistiken über den Speicher und CPU verbrauch anschauen, welche tatsächlich beeindruckend sind.
Wo es natürlich knallt ist die Kompatibilität zu php4 so sind mir folgende beiden Problem bereits untergekommen:

$var =& new $ojeckt()
Geht nicht da kann man das & einfach streichen. Dies war für php4 zwingen erforderlich und war schon im 5 nur noch abwärts kompatible.

split muss nun durch explode ersetzt werden. Dies gilt seit PHP 5.3.0 als DEPRECATED.

Weitere Tests folgen…

php: str to specification

Sonntag, Juni 3rd, 2012

Für das dhcp server mit mysql Script benötigte ich eine Funktion die Sonderzeichen aus Strings entfernt. Dies habe ich so gelöst.

Ausgabe: hier1ganzgroerstring

Sporadische Seitenladefehler durch Segmentation fault

Dienstag, Februar 21st, 2012

Vergangene Woche war meine Blog immer wieder von ausfällen geplagt. Das komische war das es immer wieder in der gleichen WordPress Funktion call_user_func_array auftauchte.
Bei Debuggen verschob sich aber immer wieder der Ort wo der Fehler auftrat, ähnlich der Heisenbergsche Unschärferelation. Zudem trat der Fehler nur bei jedem vierten seiten Aufruf auf.

[notice] child pid 29729 exit signal Segmentation fault (11)
[notice] child pid 29856 exit signal Segmentation fault (11)
[notice] child pid 29888 exit signal Segmentation fault (11)

Im Endeffekt habe ich jetzt erst mal PHP und Apache ohne -threads* kompeliert.