Allgemeine Frage zur Kommunikation übers Internet

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Allgemeine Frage zur Kommunikation übers Internet

Beitrag von jacdelad »

Ich muss mal etwas weiter ausführen:
Ich möchte ein größeres Projekt anfangen ohne jetzt zu sehr ins Detail zu gehen, weil ich noch nicht weiß, ob das was wird. Dabei kann jeder in einer Art Lesemodus mitmachen. Dabei sollen gewählte Pakete von einer Quelle im Internet, in dem Fall mein NAS bei mir zu Hause, runtergeladen werden. Diese sind relativ klein. Außerdem kann sich jeder anmelden, selbst Pakete erstellen und bei mir hochladen; aber wie gesagt, niemand muss.
Wie auch immer: Was ist die beste Art der Kommunikation dafür? Ich weiß, wie ich es per FTP machen könnte, halte das aber für ineffizient und eventuell auch sicherheitsmäßig bedenklich.
TCP kommt nicht in Frage, weil ich ein Serverprogramm benötigen würde.
Mit CGI kenne ich mich nicht aus, würde das gehen?
Ich kann eine MySQL-Datenbank auf meiner Cloud erstellen. Hilft das? Eventuell die Daten als Blob speichern?
Gibt's andere Möglichkeiten die ich nicht bedacht habe?
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von dige »

Klingt nach einer klassischen Server / Client Anwendung. Sowas mache ich gern mit SpiderBasic (Client) und PureBasic (CGI/Server) in einem Projekt mittels Spiderbite.
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von jacdelad »

In dem Fall brauche ich aber eine Serveranwendung, die ich für mein NAS nicht programmieren kann. SpiderBasic habe ich nicht (mich schreckt die Lizenzierung etwas ab (das ist keine Wertung und soll keine Diskussion hervorrufen!)).

Mit CGI habe ich noch nicht gearbeitet. Verstehe ich das richtig, dass ich ein Programm mittels PHP oder so erstelle und per Webadresse kommuniziere? Ich drücke mich bestimmt unglücklich aus.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von NicTheQuick »

Du wirfst hier Dinge durcheinander.
TCP/IP wirst du so oder so brauchen. Das ist die Grundlage fast jeden Protokolls.
(Fast)CGI ist nur eine Technologie um Applikationen im Rahmen einer Webanwendungen laufen zu lassen.
FTP ist unsicher, weil Nutzername und Passwort im Klartext übermittelt werden. Wenn überhaupt, müsstest du SFTP nutzen, und dann nur Erstellen, Schreiben und Lesen zulassen, aber nicht Löschen. Ineffizient wäre das aber trotzdem.
Eine direkter Datenbankzugriff wäre möglich, sollte dann aber auch verschlüsselt stattfinden und jeder Nutzer sollte einen dedizierten Datenbanknutzer haben mit ausschließlich den Rechten, die er benötigt. Damit muss man sich dann aber auch auskennen und das ganze gut durchplanen.

Die beste Möglichkeit wurde schon gesagt. Eine Server-Client-Anwendung. Die könnte dann über HTTP mittels REST-API oder so laufen. Benutzerauthentifizierung, Cookies und Co müsstest du dann aber auch selbst entwickeln, falls das nicht schon mal jemand mit Purebasic gemacht hat.

Oder eine ganz andere Idee: Nutze bereits existierende Serversoftware dafür. ;-)
Bild
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von jacdelad »

Urks. Danke für die ausführliche Antwort.
Ja, bei TCP hab ich Protokoll und Programm durcheinandergehauen. Ich habe bereits innerhalb von PureBasic damit gearbeitet, aber ich kann ja leider kein Gegenstück auf meinem NAS erstellen. Ich versuche es mal über eine VM, das klappt vielleicht.
Für eine Datenbank kann ich unmöglich eine unbegrenzte Anzahl Nutzer einrichten. Kann ich die Aufrufe mit einem Nutzer irgendwie absichern? Kann was schlimmeres passieren, als dass die Datenbank gelöscht wird? Wenn das der schlimmste Fall wäre, dann wäre das verschmerzbar, solange der Rest meines NAS nicht betroffen ist. Bitte entschuldigt die naiven Fragen, mit Netzwerken und Datenbanken hab ich noch nicht viel gemacht (und was ich gemacht habe fand innerhalb eines privaten Netzwerks statt).
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von TroaX »

Ich weiß jetzt nicht, was du für eine NAS hast. Aber in de Regel gibt es auch entsprechend passende Modul/Extensions für. Zum Beispiel kannst du Cloud-Dienste wie Nextcloud oder Seafile verwenden, wohingegen letzteres tatsächlich die Dateien als Blob speichert. Du könntest ein Protokoll wie WebDAV verwenden. Oder über HTTPS mit Hilfe eines z.B. PHP Backends.

Ich als bekennender Fan des HTTP(S) Protokolls würde auch zu diesem Weg raten. Du müsstest dann aber auch dafür sorgen, das du ein Zertifikat bekommst. Diese sind aber in der Regel meines Wissens nach nur mit gültiger Domain möglich. Aber sobald du dies hast, kannst du alle Anfragen auf Port 80 und 8080 auf 443 umleiten, eine gesicherte/verschlüsselte Verbindung damit erzwingen und brauchst ansonsten nichts weiter beachten. (S)FTP und Konsorten brauchste damit nicht.

Am Ende kommt es aber immer darauf an, wie groß der Aufwand sein soll/darf. Und vor allem darauf, was der Server unterstützt.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
Captn. Jinguji
Beiträge: 395
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von Captn. Jinguji »

jacdelad, hört sich ja auf jeden Fall interessant an.
Ich hatte auch mal sowas vor, hatte mir aber ehrlich gesagt - bevor das Projekt aus organisatorischen Gründen einschlief - überlegt, dass ich aus Sicherheitsgründen für den Anfang lieber ein kleines, separates NAS benutzen würde, damit Externe nicht direkt auf meinem eigentlichen NAS herumspuken können. Klar, ich sichere natürlich die Daten regelmäßig (was überhaupt der Grund ist, dort alle wirklich wichtigen Daten zu halten) Aber Fremde direkt DARAUF lassen ? NEEE!, es gibt einfach zu viele A........ , die nur darauf warten, anderen schaden zu können.

Gut, ist natürlich einfach, jemand anderem zu raten "ach hau doch einfach mal mindestens 200€ raus " (wären so etwa bei mir die Kosten für die kleinste Synology mit neuer Platte; ich glaube, die Hersteller der gängigen NASs tun sich da nicht viel), ist mmir schonklar. Aber wenn Du auf Deinem NAS wirklich wichtige Daten hältst, würde ich zumindest mal rechnen, was ein Datenschaden auf Deinem Haupt-NAS so heißen könnte (vor allem, wenn Deine Backup-Medien nicht nach jedem Backup automatisch offline gehen). Und es geht ja nicht nur darum, dass Dir ggf, Deine wichtigen Daten weggeschossen werden, sie können ja vorher auch noch Unbefugten in die Finger fallen.

Wenn Du noch den berühmten alten PC, den wir "ja alle noch herumstehen haben" - hast, könntest Du den ja auch die Requests aus dem Netz entgegen nehmen lassen. Auf dem könnte dann ein weiteres (PB)-Programm laufen, das dann mit einer DB auf Deinem NAS kommuniziert,
das wäre so das Äußerste, was ich mir bei mir aus Sicherheitsgründen vorzustellen gewillt wäre.

Dazu müsste man dann eine eigene "Pseudo-Benutzer"-Verwaltung implentieren, so dass Du mit einem einzigen echten DB-User auskommst. Nur dieser identifiziert sich gegenüber der DB aus dem Programm heraus mit einem DB User, aber bei jedem Daten-Zugriff wird mitgegeben, für welchen Pseudo-User der Zugriff erfolgen soll, wobei über eigenen User- und Berechtigungstabellen in der DB abgeprüft wird, ob für den der Pseudouser überhaupt auf die gewünschte Ressource zugegriffen werden darf. Im Moment sieht nach deiner Beschreibung Deine Anwendung ja recht einfach strukturiert aus, so dass eine einfache, selbstgeschriebene Benutzerverwaltung vielleicht sicherer ist als eine, die komplizierteste Strukturen abbilden kann
- aber eben durch die Komplexität mehr Fangstellen für Hacks aufweisen kann, oder schlicht (diesbezüglich) "Noch in Fortbildung Begriffene" in falscher Sicherheit wiegen kann.
Und "one of these days" werden wir wohl auch mit PB auf Raspberry PIs losgehen können, aber darauf wirst DU ja vielleicht nicht warten wollen - in der cT sind ja immer wieder mal Projekte mit RaspPis als sehr preiswerte NAS-Server zu finden.
Benutzeravatar
jacdelad
Beiträge: 341
Registriert: 03.02.2021 13:39
Computerausstattung: Ryzen 5800X, 108TB Festplatte, 32GB RAM, Radeon 7770OC
Wohnort: Riesa
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von jacdelad »

Vielen Dank für immer ausführlicheren Antworten. :mrgreen:

Mein Haupt-NAS ist ein Synology mit 56TB Daten. Ich hab noch ein Terramaster, das ist aber momentan nicht in Betrieb. Ich muss mir erstmal anschauen, wie die Kommunikation von WebDAV funktioniert. Port 80, 8080 und 443 sind bei mir momentan gesperrt, weil es da Sicherheitsprobleme gibt (u.a. ein Großangriff auf Terramaster vor 11 Monaten). RSync leite ich momentan über andere Ports um. Es besteht immer noch die Möglichkeit einen Docker-Container mit einem Linux zu erstellen und das Serverprogramm dort laufen zu lassen. Ich denke das sollte relativ sicher sein. Die anderen Möglichkeiten muss ich erstmal intensiv studieren.
Einen weiteren Rechner möchte ich definitiv nicht laufen lassen, das wird mir zu teuer.

Ich hoffe, dass ich euch mein Projekt nächstes Jahr vorstellen kann. Ich hab heute schon angefangen, aber erstmal nur der lokale Teil. Mal sehen, vielleicht wird's ja auch ein Rohrkrepierer.
PureBasic 6.04/XProfan X4a/Embarcadero RAD Studio 11/Perl 5.2/Python 3.10
Windows 11/Ryzen 5800X/32GB RAM/Radeon 7770 OC/3TB SSD/11TB HDD
Synology DS1821+/36GB RAM/130TB
Synology DS920+/20GB RAM/54TB
Synology DS916+ii/8GB RAM/12TB
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von TroaX »

Angriffen ist man bei jedem Server ausgesetzt. Und gerade im Home-Hosting hast du ohne erheblichen Aufwand auch keine Chance, diese abzuwehren. Egal über welchen Port. Deswegen bin ich auch einfach kein Fan davon, Heim-Hardware frei im Internet verfügbar zu machen. Meine NAS ist ausschließlich über VPN von außen erreichbar. Wenn ich Internet-Projekte testen will oder etwas für allgemein verfügbar machen möchte, miete ich mir vServer oder Webspaces auf Prepaid-Basis. Und mit DDoS-Protection bist du eigentlich ganz angenehm dabei.

WebDAV ist im Grunde eine für den Dateiaustausch spezielle Form vom HTTP-Protokoll, welches du entweder als Software direkt oder sogar per PHP (was zum Beispiel Nextcloud tut), Node oder Python realisieren kannst. Der Vorteil dabei ist eben auch, das auch WebDAV mit HTTPS kompatibel ist und somit ein kostenfreies Lets Encrypt Zertifikat auch dafür genutzt werden kann. Wenn du ein eigenes Client-Programm dafür schreiben willst, kann man das theoretisch mit der HTTP-Bibliothek aus Purebasic machen. Nur bedarf es da auch einiges an Wissen bezüglich HTTP-Authentifizierung. Da aber Client sowie Serverseitig in der Regel an alle Header-Infos herankommst, kannst du die Auth-Felder des Protokolls ihrer Bestimmung nach selbst auswerten und zum Beispiel die Benutzerverwaltung über eine Datenbank regeln, anstatt die entsprechenden Dateien auf dem Webserver zu bearbeiten.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Allgemeine Frage zur Kommunikation übers Internet

Beitrag von NicTheQuick »

Ich mach ja ungern Werbung, aber ich kann den hier nur empfehlen für alle einfachen Dinge: https://www.netcup.de/bestellen/produkt ... odukt=2042
Bild
Antworten