ich bin noch nicht sehr erfahren was die Programmierung mit SpiderBasic angeht, habe mir aber dennoch vorgenommen ein "mittel-kleines" Projekt mit Spider umzusetzen. Daher werde ich diese Rubrik des Forums in Zukunft vermutlich etwas öfter bemühen.

Bei einigen Themen kann ich nicht einschätzen, ob meine Herangehensweise in Ordnung ist oder ob man das anders besser machen kann.
Worum geht es genau?
Es geht um eine Webanwendung die per Login geschützt sein soll und die über mehrere PHP Module per HttpRequest() kommuniziert, um mit einer Datenbank und dem Filesystem zu interagieren.
Ich habe also einen Programmteil der auf dem Clientbrowser läuft und in Spiderbasic geschrieben sein wird (bzw. nach dem compilieren in JavaScript). Hier ist die gesamte GUI, deren Logik und die Erfassung, Verarbeitung und Anzeige von Daten realisiert.
Der andere Programmteil liegt auf dem Server und wird vom SpiderBasic aktiv aufgerufen. Die Parameter werden per POST übergeben.
Bei folgenden Punkten weiß ich noch nicht wie ich es am besten angehe:
1) Thema Login und Berechtigung, um die SpiderBasic Anwendung überhaupt benutzen zu dürfen.
Wenn ich die Webanwendung in reinem PHP/HTML schreiben würde, dann würde ich einen Login-Screen programmieren und die Berechtigungen des Users nach erfolgreichem Login in einer Sessionvariable speichern. Beim Aufruf von anderen PHP-Seiten, die zu der Anwendung gehören, würde ich dann jeweils die Sessionvariable mit dem Berechtigungslevel auslesen und entsprechend im PHP Skript reagieren (entweder das Skript weiter ausführen oder halt mit einer Hinweismeldung abbrechen, wenn die Berechtigung nicht ausreicht).
Aber wie mache ich das innerhalb von SpiderBasic?
a) Ich könnte den Login-Screen direkt in der SpiderBasic Anwendung realiseren, so dass ich auch direkt in SpiderBasic entscheide, ob der User weiter mit der Anwendung arbeiten darf oder sofort wieder rausgeschmissen wird.
Nun ist SpiderBasic letztendlich JavaScript und läuft auf dem Browser des Anwenders. Wäre es dem Anwender hier nicht möglich den JavaScript Code zu analysieren und zu verändern, um die Login-Prüfung zu umgehen? Das wäre ein Sicherheitsrisiko. Leider kenne ich mich mit JavaScript eher äh nicht aus.

b) Ich könnte den Login-Screen in PHP realisieren, danach direkt die Sessionvariablen mit der Berechtigung des Users füllen und bei erfolgreichem Login zur SpiderBasic Anwendung weiterleiten.
Hier stellt sich trotzdem ein ähnliches Problem. Die Spiderbasic Anwendung wird ja letztendlich durch einen Aufruf der betreffenden *.html Datei gestartet. Die URL der SpiderBasic Anwendung kann man dann entweder direkt in der Adresszeile des Browser sehen oder aber mit Hilfe der Developertools des Browsers. Wenn man diese URL weiß, könnte man sie auch direkt ohne den Loginprozess aufrufen. Dann wäre die Login-Prüfung völlig umgangen.
b2) Ich könnte von der SpiderBasic Anwendung heraus eine Abfrage an den Webserver senden, ob der aktuelle Benutzer die passende Berechtigung hat (HttpRequest() an ein PHP-Skript, welches die Authentifizierung regelt). Aber auch hier gilt wieder: JavaScript läuft auf dem Browser und ich weiß nicht, ab man auch diesen Aufruf bzw. deren Rückgabe als Angreifer kompromittieren könnte.
c) Für zusätzliche Sicherheit könnte ich wie unter b2) vorgehen und mir vom PHP-Authentifizierungsmodul bei ausreichender Berechtigung ein Token zurückgeben lassen. Dieses Token müsste dann bei sämtlicher Kommunikation mit dem Server mitgesendet werden. Also jedes mal, wenn die SpiderBasic Anwendung Dateisystem- oder Datenbankanfragen an den Webserver sendet. Nur, wenn das mitgesendete Token mit dem Token des erfolgreich angemeldeten Benutzers identisch ist, wird die Anfrage ausgeführt.
So könnte ein unberechtigter User zwar die GUI der SpiderBasic Anwendung sehen und teilweise benutzen, aber alles was mit der Serverkommunikation zu tun hat, würde fehlschlagen.
Ob das dann alles ausreichend sicher ist, kann ich nicht beurteilen.
Über Hinweise von Experten zu dem Thema würde ich mich sehr freuen.

2) Parameterübergabe zu einer Spiderbasic Anwendung.
Man kann einem PHP Script per POST oder GET Parameter übergeben. Einem PureBasic Programm kann man auch Parameter übergeben, die man mittels ProgramParameter() abrufen kann.
Für SpiderBasic habe ich so etwas noch nicht gefunden.
Dabei wäre es auch im Hinblick auf die Login-Thematik evtl. sinnvoll, wenn ich der SpiderBasic Anwendung bei deren Aufruf auch gleich mitteilen könnte, dass der User eine ausreichende Berechtigung hat (dass man das als Angreifer evtl. aushebeln könnte mal beiseite gelassen).
3) Sichere Datenbankabfragen
Auch hier habe ich wieder die Befürchtung, dass man den JavaScript Code verändern kann, um Unfug zu treiben oder unberechtigt an Daten zu gelangen.
Es geht um die sichere Kodierung von Datenbankanfragen in Spiderbasic.
Realisiert wird das Ganze ja über den HttpRequest() Aufruf eines PHP Scripts, welches dann die eigentliche Kommunikation mit der Datenbank übernimmt und das Ergebnis der Abfrage an die SpiderBasic Anwendung zurückgibt.
Vermutlich wurde so ein Modul schon tausend mal entwickelt (CRUD-Modul), nur leider stecke ich da nicht weiter im Thema.
a) Vom logischen Menschenverstand her, würde ich erstmal sagen, dass es hochgradig gefährlich ist die gesamte SQL-Abfrage innerhalb der SpiderBasic Anwendung vorzuhalten und diese an das PHP Modul zu senden. Also z.B. "Select id_user From users Where name = "Meier" and PasswordHash = "blahblah". Man könnte die Abfrage als Angreifer sicherlich manipulieren, um Schaden in der Datenbank anzurichten.
b) Man könnte die Funktionalität abstrahieren.
Das PHP Modul bekäme folgende Parameter übermittelt:
- Command (also ein Kennzeichen, ob ein Select, Delete, Update oder Insert ausgeführt werden soll)
- Table (Kennzeichen welches angibt welche Tabelle gemint ist - Dabei gilt: Das Kennzeichen soll nicht so lauten wie der Tabellenname!)
- Values (Welche Datenfelder sollen zurückgeliefert werden)
- Clause (Einschränkungen, also quasi die Where-Klausel des SQL Statements)
Das ganze ist vermutlich exakt so unsicher wie a), nur dass man als Angreifer kurz länger drüber nachdenken muss.
c) Man könnte die gesamte Funktion und das gesamte SQL ins PHP-Modul stecken und dort alle Commandos bzw. Abfragen programmieren, die das SpiderBasic Programm insgesamt benötigt.
Dann würde man dem PHP Modul nur noch folgendes übermitteln:
- Command (gibt an was gewünscht ist)
- Values[] (die Werte die bei einem Update oder Insert Command in die Tabelle eingetragen werden sollen)
Das PHP Modul müsste dann leider reichlich redundanten Code enthalten, weil für jedes Command eine eigene Funktion geschrieben werden müsste.
Zum Beispiel:
Command = "CHECKUSER"
Value1 = "Meier"
Value2 = "blahblah"
-> Prüfe, ob der User mit dem Namen "Meier" und dem PasswortHash "blahblah" in der Tabelle user vorhanden ist und die Berechtigung hat die Anwendung zu nutzen. Gibt 0/1 zurück, wenn dem so ist.
Command = "GETPRODUCT"
Value1 = "1309"
-> Gib den Datensatz des Produktes mit der ID 1309 aus der Tabelle products zurück. Die Übergabe an Spider dann als JSON String.
Command = "UPDATEUSEREMAIL"
Value1 = "3"
Value2 = "meineemail@gmx.de"
-> Updatet das Feld Email des Users mit der ID 3 in der Tabelle user mit dem Wert 'meineemail@gmx.de'. Gibt je nach Erfolg der Aktion 0 oder 1 zurück.
Wie unter 1c) schon angesprochen, könnte man hier zur besseren Sicherheit bei jedem Aufruf des PHP Datenbank-Moduls zwangsweise einen Token-Parameter mit übergeben. Das Token enthält eine zufällige Zeichensequenz oder eine Checksumme, welche vorher vom Authentifizierungsmodul nach dem erfolgreichen Login erzeugt wurde.
Aber wie gesagt, das ist alles nur Menschenverstand und gefährliches Halbwissen.

Wenn hier einer so richtig Ahnung von dem Zeug hat, dann bin ich für Links oder Hinweise echt dankbar.
Ach so, da fallen mir noch zwei Sachen ein:
4) Im Dialog "CreateApp" gibt es im Reiter "Web" unten den Bereich "Post processing:".
Ist das sowas wie ein IDE Werkzeug, welches nach dem Compilieren gestartet wird? Also könnte man hier zum Beispiel eine Batch angeben, die einem das Compilat direkt auf den Webserver schiebt?
5) Ich stelle fest, dass bei der Erzeugung einer Web-Anwendung der Ordner mit den SpiderBasic Libraries immer gleich groß ist. Das heißt dann wohl, dass Spider es nicht so macht wie PureBasic und nicht nur die vom Programm benutzten Libs kopiert, sondern immer alle Libs?
Gruß Kurzer