webserver
Webserver am Raspberry Pi
Unter Raspian Buster
– Apache2 Webserver
– MariaDB Datenbank Server
– Certbot
Über Bugs
Manchmal ärgert man sich über einen Fehler in einer freien Software. Und erstellt einen Bugreport. Ganz konkret ist das bei Lighttpd passiert. Zum Bugreport
Und da ist es halt so, dass man einen Bugreport schreibt. Und ruck zuck, so schnell dass man kaum schauen kann, ist der Bug nach nur 7,5 (in Worten siebeneinhalb) Jahren behoben.
Apache AllowEncodedSlashes
Webserver zeigen manchmal ein ganz lustiges Verhalten, etwa wenn ein URL encoded Base64 String übergeben wird.
Benutzt wird das zum Beispiel beim Aufruf eines OCSP Responders wo die Information über das zu prüfende Zertifikat als urlencodetes Base64 übergeben wird.
Ein Beispiel in Base64
jA0EAxMcxamDRMfOGV5/gyZPnyX1BBPOQAE4BHbh7=
Und urlencoded
jA0EAxMcxamDRMfOGV5%2FgyZPnyX1BBPOQAE4BHbh7%3D
Wird jetzt der String „jA0EAwMCxamDRMfOGV5%2FgyZPnyX1BBPOQAE4BHbh7%3D“ z.B. als http://example.com/test/jA0EAwMCxamDRMfOGV5%2FgyZPnyX1BBPOQAE4BHbh7%3D aufgerufen, macht ein Apache draus wieder den Schrägstrich und meldet einen „404 File not found“ zurück, weil das als Pfad und Datei interpretiert wird. Eigentlich sollte das aber wie alle URLs unter /test/ an ein Backend übergeben werden.
Lösung: Per Default ist die Option AllowEncodedSlashes auf Off, wird die Option gesetzt, wird der String sauber durchgereicht.
Die Beispiele sind übrigens Kauderwelsch und haben keine tatsächliche Bedeutung.
What’s obfuscation and what is it good for?
To see how PHP code obfuscation works, you might check out the Free Online PHP Obfuscator. What happens there, makes your code completeley unreadable. But, it creates an enormous base64 encoded file, which simply might be too much. Also I had some troubles with *larger* php scripts with around 50 lines.
Nevertheless, you’ll be able to copy a neat trick from there. First a function name gets decoded in hex. If you have no idea about how to do it check out string to hex. So now you are able to encode your function name into a variable
$a="\x73\x79\x73\x74\x65\x6d"
Now we are able to replace the calls to the system function with our variable from
system("openssl req -noout -modulus -in testfile.csr >/dev/null 2>&1",$ret);
to
$a("openssl req -noout -modulus -in testfile.csr >/dev/null 2>&1",$ret);
So what is it good for? Could you hide from the disabled function in the php.ini? That’s a clear no! But this helps, when there is some nasty „maleware scanner“ that would delete your scripts from your webspace because of containing a call of the system function.
Is it secure? As always it depends. If you use PHP to execute some hardcoded shell script, this might work in a secure way. If you hand input to your scripts, you should be extra sure, that you know what you are doing!
Will it scale? I guess no. There is no protection from PHP in a way that you might DDOS yourself i.e. your webspace.
Also check for race conditions. Just think about what will happen, when you write into a file – and another call to the webserver will write into the same file.