FastCGI: Sicherheits- und Funktionsdiskussion
Verfasst: 07.10.2015 00:51
Halli Hallo,
ich möchte an dieser Stelle gerne eine Diskussion zum Thema Sicherheit mit FastCGI beginnen. Mit der nächsten LTS hält ja nun FastCGI endgültig festen Einzug in PureBasic. Gerade weil es für Windows, Linux und Mac lauffähig ist, halte ich im neuen Build genau diese Lib für die größte Neuerung (gerade auch für Linux-Server). Die Performance einer FastCGI-Anwendung im Vergleich zu einer PHP-Anwendung ist wirklich der Hammer. Theoretisch wäre mit PureBasic und z.B. Lua eine Alternative zu PHP möglich, wobei sich da über Sinn und Unsinn streiten lässt. Eine weitere Serverseitige Scriptsprache (aus Plaintext interpretiert) brauchen wir eigentlich meiner Meinung nach wirklich nicht.
Nun gibt es da allerdings das ein oder andere Problemchen. Denn so mächtig PB auch ist, fehlt es im Vergleich zu z.B. PHP noch an einigen Funktionen, die aber für Webanwendungen essentiell sind. Und genau hier würde ich gerne mit euch herumphilosophieren. Ich erwarte hier keine Codes. Mir geht es nur um Anregungen, Meinungen und Erkenntnisse und dessen Austausch.
Dann fange ich mal mit einer Beobachtung an.
Parameterüberladung: Die CGI-Lib von PB besitzt nur einen Weg, alle Parameter abzufragen. Dabei unterscheidet sie nicht zwischen GET- und POST-Daten. Dadurch lassen sich Parameter überladen. Besitzt ein POST-Formular zum Beispiel den Namen "game" (z.B. Suchbegriff für eine Spieledatenbank), kann der dort eingetragene Wert den Parameter "game" aus der URL überladen und somit unter Umständen zu unerwartetes Verhalten führen. Ich habe es also so gelöst, das ich mit den CGI-Variablen mir die gesamte URL samt GET-Parameter geholt und mit der HTTP-Funktion GetURLPart und dem URLDecoder die GET-Parameter herausgelöst habe. Wenn jemand etwas besseres hat, möge er und an diesen Gedanken teilhaben lassen
Keine Sessions: Aus PHP bekannt und man möchte es auch eigentlich nicht mehr missen. Die Sessions. Ein kleiner strukturierter Speicher in Textdateien, um Warenkörbe, Hasches und ID's für den Nutzer zu speichern. PHP legt für jeden Client eine neue Datei an und speichert dort die Werte. Ich hatte mir überlegt, das ganze vielleicht mit der Preferences-Bibliothek zu machen. Allerdings lässt sich das damit nur auf eine Dimension einschränken. In PHP geht das ganze über mehrere Dimensionen. Was wäre hier besser? JSON oder XML? Oder doch etwas anderes?
Passwort: Das mit Abstand wichtigste Thema. Seit längerem besitzt PHP dafür die password_hash Funktion. Hier haben wir nativ nur die Möglichkeit, nach altem Rezept zu arbeiten. Passwort einmal hashen und fertig. Allerdings reicht mir das nicht. Ich habe überlegt, neben einem guten Sha3 auch noch eine Prüfsumme zu erzeugen (senkt die Wahrscheinlichkeit, mit einem kollidierten Passwort einloggen zu können). Zudem soll ein Salt an oder vor das Passwort gehängt werden. Nun aber mal eine interessante Frage dazu. Die password_hash Funktion von PHP hängt den Salt Plain an den Hash und speichert den so in der Datenbank. Ist denn damit das Password wirklich so viel sicherer oder wäre es besser, den Salt jedesmal zu generieren? Und wie steht ihr zu iterative hashing?
Ich hoffe auf rege Beteiligung und freue mich auf interessante Beiträge zu dem Thema
PS: Ihr könnt auch eigene Dinge ansprechen. Also nicht nur meine Fragen beantworten und dann wars das. Ist ja nicht Sinn und Zweck der Sache

ich möchte an dieser Stelle gerne eine Diskussion zum Thema Sicherheit mit FastCGI beginnen. Mit der nächsten LTS hält ja nun FastCGI endgültig festen Einzug in PureBasic. Gerade weil es für Windows, Linux und Mac lauffähig ist, halte ich im neuen Build genau diese Lib für die größte Neuerung (gerade auch für Linux-Server). Die Performance einer FastCGI-Anwendung im Vergleich zu einer PHP-Anwendung ist wirklich der Hammer. Theoretisch wäre mit PureBasic und z.B. Lua eine Alternative zu PHP möglich, wobei sich da über Sinn und Unsinn streiten lässt. Eine weitere Serverseitige Scriptsprache (aus Plaintext interpretiert) brauchen wir eigentlich meiner Meinung nach wirklich nicht.
Nun gibt es da allerdings das ein oder andere Problemchen. Denn so mächtig PB auch ist, fehlt es im Vergleich zu z.B. PHP noch an einigen Funktionen, die aber für Webanwendungen essentiell sind. Und genau hier würde ich gerne mit euch herumphilosophieren. Ich erwarte hier keine Codes. Mir geht es nur um Anregungen, Meinungen und Erkenntnisse und dessen Austausch.
Dann fange ich mal mit einer Beobachtung an.
Parameterüberladung: Die CGI-Lib von PB besitzt nur einen Weg, alle Parameter abzufragen. Dabei unterscheidet sie nicht zwischen GET- und POST-Daten. Dadurch lassen sich Parameter überladen. Besitzt ein POST-Formular zum Beispiel den Namen "game" (z.B. Suchbegriff für eine Spieledatenbank), kann der dort eingetragene Wert den Parameter "game" aus der URL überladen und somit unter Umständen zu unerwartetes Verhalten führen. Ich habe es also so gelöst, das ich mit den CGI-Variablen mir die gesamte URL samt GET-Parameter geholt und mit der HTTP-Funktion GetURLPart und dem URLDecoder die GET-Parameter herausgelöst habe. Wenn jemand etwas besseres hat, möge er und an diesen Gedanken teilhaben lassen
Keine Sessions: Aus PHP bekannt und man möchte es auch eigentlich nicht mehr missen. Die Sessions. Ein kleiner strukturierter Speicher in Textdateien, um Warenkörbe, Hasches und ID's für den Nutzer zu speichern. PHP legt für jeden Client eine neue Datei an und speichert dort die Werte. Ich hatte mir überlegt, das ganze vielleicht mit der Preferences-Bibliothek zu machen. Allerdings lässt sich das damit nur auf eine Dimension einschränken. In PHP geht das ganze über mehrere Dimensionen. Was wäre hier besser? JSON oder XML? Oder doch etwas anderes?
Passwort: Das mit Abstand wichtigste Thema. Seit längerem besitzt PHP dafür die password_hash Funktion. Hier haben wir nativ nur die Möglichkeit, nach altem Rezept zu arbeiten. Passwort einmal hashen und fertig. Allerdings reicht mir das nicht. Ich habe überlegt, neben einem guten Sha3 auch noch eine Prüfsumme zu erzeugen (senkt die Wahrscheinlichkeit, mit einem kollidierten Passwort einloggen zu können). Zudem soll ein Salt an oder vor das Passwort gehängt werden. Nun aber mal eine interessante Frage dazu. Die password_hash Funktion von PHP hängt den Salt Plain an den Hash und speichert den so in der Datenbank. Ist denn damit das Password wirklich so viel sicherer oder wäre es besser, den Salt jedesmal zu generieren? Und wie steht ihr zu iterative hashing?
Ich hoffe auf rege Beteiligung und freue mich auf interessante Beiträge zu dem Thema
PS: Ihr könnt auch eigene Dinge ansprechen. Also nicht nur meine Fragen beantworten und dann wars das. Ist ja nicht Sinn und Zweck der Sache