Sicherster Weg eine Verbindung aufzubauen

  • VB.NET

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von KlyX.

    Sicherster Weg eine Verbindung aufzubauen

    Hallo,
    ich wollte fragen was der sicherste Weg ist um mit VB.net 2010 eine Verbindung zu einer MySQL Datenbank aufzubauen.

    1. Benutzername und Passwort im Code? Wohl eher nicht
    2. Mit der MySQL Lib3? Naja es befindet sich zwar kein PW und Benutzername im VB.net Quellcode. Jedoch kann man ja die DB ansteuern, wenn man weiß wo die "query.php" liegt.

    Dies sind ja sicherlich nicht die sichersten Wege eine Verbindung zu einer DB aufzubauen, bin in der Datenbankprogrammierung sehr neu, würde mich über eine Antwort von euch freuen.
    Mit freundlichen Grüßen,(Best regards,)
    Tobias H.

    DJ-Software/DJ-Programm(Beta): 97%

    Kassensoftware/Cashdesk: 1%


    Einfach über ein PHP-Skript, das Du über 'nen normalen WebClient ansteuern kannst.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Ok danke für deine Antwort
    Mit freundlichen Grüßen,(Best regards,)
    Tobias H.

    DJ-Software/DJ-Programm(Beta): 97%

    Kassensoftware/Cashdesk: 1%


    ErfinderDesRades schrieb:

    was ist an php sicher?
    Unter anderem, dass es direkt interpretiert wird, man keine Credentials im VB.NET-Code braucht und man keinen externen Zugriff auf die Datenbank braucht. Natürlich kann auch da was schiefgehen. Wenn man allerdings alles richtig macht, dann passt das.

    ErfinderDesRades schrieb:

    Zb kann man die Kommunikation sniffen, und dann kann man dem Script auch eigene Inhalte schicken.
    Deswegen gibt es HTTPS.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade auch dann kann man eigene Inhalte senden :P
    Man sollte natürlich nicht einfach Queries vom Client annehmen und ausführen, das wäre mehr als grob fahrlässig.
    Ja, das natürlich, wenn man das Skript ansteuert. ;)
    Aber ich meinte jetzt bzgl. des Abgreifens und Manipulierens.

    Natürlich sollte innerhalb des Skripts das Ganze auch richtig verarbeitet werden und nicht einfach irgendeine Query ungeprüft ausgeführt werden. Aber ich hoffe mal, dass das der Grundsatz eines jeden ist. (Wobei man natürlich nicht vorsichtig genug sein kann. ^^)

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Trade schrieb:

    Deswegen gibt es HTTPS.
    jo, mit S ist es leidlich sicher, also es ist nicht mehr trivial, missbräuchliches an die Db abzusetzen.
    S steht für SSL, und ich glaub man kann SSL auch auf niedrigeren Protokol-Leveln einrichten.
    Die "Sicherheit", die php bietet, nämlich dass nur noch explizit definierte Methoden zu ge- oder miss-brauchen sind - diese Sicherheit kann man auch mit Benutzerrechten und StoredProcedures auf dem MySqlServer direkt einrichten.
    Also im Grunde kann man sich den php-Http - Umweg sparen, wenn man nur die MySql-Möglichkeiten richtig ausschöpft.
    Mein Problem ist nur, ich hab sone SSL-Verbindung bislang nie hinbekommen - ich bin zu doof, um das mit den Zertifikaten richtig hinzufrickeln. (Oder zu faul, mich da zu engagieren, weil ich hab eh kein WebServer).
    @ErfinderDesRades: mich würde mal interessieren ob du auf der .NET Seite Probleme hast oder es generell ein Problem ist eine SSL gesicherte Webseite einzurichten? Hab vor kurzen erst etwas programmieren müssen was nur Verbindungen mit einem gewissen SSL-Zertifikat (und Chain) erlaubt war ziemlich interessant sowas mal auszuprobieren.
    ich hab mal eine Übung mit Remoting gemacht, und eine mit WCF, und vor langerlanger Zeit auch mal ein ASP.Net-Projekt angefangen. Bei allem 3 kann man wohl was mit SSL einstellen, aber war ich zu faul, da was in meim CertificateStore zu installieren, auf gut Glück - man weiß ja erst hinterher, obs funzt.
    @ErfinderDesRades: Das Problem mit MySQL ist, dass man diese Möglichkeiten der Einrichtung von MySQL Servern nicht bei normalen WebServern hast und die anderen kosten in aller Regel.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Ich erlaube mir @Niko Ortner zu zitieren, fand es ziemlich plausibel!
    Es ist gar nicht zwingend nötig, dafür PHP zu verwenden. (Ich würde sogar sagen, dass PHP die denkbar schlechteste Option ist.)Es ist möglich, einen MySQL-Benutzer anzulegen, der nur die benötigten Rechte für die benötigten Datenbanken bzw. Objekte hat. Das kann auch so weit gehen, dass man dem Benutzer nur das Execute-Recht gibt und alles über Stored Procedures laufen lässt. Je nach Anwendungsfall gibt es unterschiedliche Möglichkeiten. Das hat den Vorteil, dass man mit anständigen Bibliotheken (wie z.B. dem "Connector/Net") arbeiten kann, die einem die Daten bequem und stark typisiert liefern, anstatt alles mit Strings und WebRequests von Hand zu machen. Und mit PHP hat man gleich noch das Problem, dass man alle Daten durch eine schrottige, untypisierte Sprache drücken muss. Ist dann immer schön, wenn man mit Datums- und Zeitangaben als Strings in 10 verschiedenen Formaten rumhantieren muss.
    DotNETWork (Generische Tcp-Klasse, verschlüsselt!)
    CelestialMechanicSimulator (Simulation Planetensystem)
    MonogameMinecraftClone (Minecraft-Klon)
    @φConst Man kann bei vielen Hostern gar keine extra Benutzer anlegen, noch dazu sind die wenigsten in der Lage vernünftige Queries zu schreiben.
    Ich bleib bei meinen Webservices, damit hat man m.M.n. am wenigsten Probleme und es läuft bei fast jedem Hoster.
    Hallo Community,

    ich würde diesen Thread gerne wieder aufleben lassen.
    Ich bin ja schon seit etlichen Jahren "abwesend" gewesen. Aktuell versuche ich mich wieder an der Neu- bzw. Weiterentwicklung eines Tools für die Firma. Das läuft natürlich wieder mal komplett mit MySQL-Datenbank und Co.
    Nach dem Lesen des Threads ergibt sich für mich nun leider noch keine schlüssige Frage auf die Frage des TE: was ist die zurzeit beste (und hoffentlich sicherste) Variante für MySQL-Verbindungen und Abfragen?
    Über den MySQL-Connector mit Daten in der Anwendung und co. ist weiterhin quatsch, klar. Mit PHP finde ich persönlich immer noch schick, aber die Sicherheits-Issues sind da.

    Ich erinnere mich noch an ein Tut, wo ich damals die MySQLLib 3 so angepasst habe, dass das Ganze zwar sicherer wurde (keine direkten Queries übertragen, PDO, etc.), aber das Ganze war aufwändig und mühsam.
    Hat sich da seit 2012 nix getan in dieser Richtung?

    Wenn doch: gibt es irgendwo ein sinnvolle Tutorial auf dem aktuellen Stand der Technik? Dann würde ich mich nämlich damit an mein neues Projekt wagen :)

    Danke im Voraus!
    KlyX
    Chris' Weblog - Mein Blog rund um Vieles :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „KlyX“ ()

    Bei allen Möglichkeiten sollte man einen nutzer anlegen, der ausschließlich auf vorgegebene Funktionen zugriff hat. Eine zusätzliche Schicht sollte eben die Validierung der Daten sein, über welche Sprache ist dabei im Grunde egal.
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Okay, somit wäre sinnvoll:
    • Abwicklung der Anfragen über PHP (da Login zu DB nicht im Code sind und nicht übertragen werden)
    • Eigener DB-User mit sehr eingeschränkten Rechten.
    • Validierung der auszuführenden Daten
    ​ ​​Da stellen sich mir folgende Fragen:
    - welche Zugriffsvariante auf PHP ist zurzeit sinnvoll (ggf. Link zu einem guten Tutorial?)
    - Was wäre ein effiziente und sinnvolle Methode zur Validierung der Daten?
    Ich hatte das damals so gemacht, dass in meinem PHP-Script alle genutzten SQL-Befehle integriert waren. Das Einzige was also von VB an PHP geliefert wurden waren ein ID-String (für den Befehl) und entsprechende Variablen für den entsprechenden Befehl. Gegen Injections mit PDO abgesichert. Aber das ist aufwändig und nur bedingt flexibel. Vielleicht gibt es sinnvollere wege? :)
    Chris' Weblog - Mein Blog rund um Vieles :D
    ​Aber das ist aufwändig und nur bedingt flexibel.

    Aber genau richtig und die Lösung, wie die Industrie sie auch verwendet.
    Entwickel das so, dass du nachher ne .pdf mit Doku über die API an jeden anderen Entwickler (für jede beliebige Programmiersprache) geben könntest, und der damit was anfangen kann.

    PHP mit mysqli und Prepared Statements ist die Lösung, die ich meistens nutze.

    .net hat relativ tief integrierte Anbindungen für "Webservices", im Rest der Welt SOAP genannt.
    Ob man das verwenden möchte, kann ich dir nicht sagen, weil ich es noch nie in VB genutzt habe, aber von der Architektur wäre das definitiv eine empfehlenswerte Methode.
    #define true ((rand() % 2)? true: false) //Happy debugging suckers
    Ich gebe KEINE Hilfe per PN! Es gibt für ALLES nen Forum/Thread!

    Manawyrm schrieb:

    .net hat relativ tief integrierte Anbindungen für "Webservices", im Rest der Welt SOAP genannt.
    Ob man das verwenden möchte, kann ich dir nicht sagen, weil ich es noch nie in VB genutzt habe, aber von der Architektur wäre das definitiv eine empfehlenswerte Methode.


    Nur damit das nicht irgend jemand liest und sich darauf beruft.

    Die Welt nennt Webservices nicht SOAP. SOAP (Simple Object Access Protocol) ist ein Protokoll das beschreibt wie man, meistens, über HTTP und TCP Daten zwischen zwei Systemen austauscht. Dazu werden die Daten in eine XML verpackt. SOAP ist ein Standard des W3C.
    REST zum Beispiel ist ebenfalls ein Programmierparadigma für Webservices. REST kann XML oder JSON nutzen und wird auch über HTTP und TCP übertragen.

    Bei REST steht der Austausch von Daten im Fokus, bei SOAP hat man dazu auch Transaktionsicherheit (ACID).

    Möchtest du also nur Daten von der DB und Transaktionssicherheit spielt keine Rolle, oder deine Anwendung kann sich um die Transaktionssicherheit kümmern, dann REST ansonsten SOAP.

    Die Frage ist auch bei einem mySQL Server welche Möglichkeiten der Programmierung hat man. Kann man .net (Core?!) verwenden so kann man zum Beispiel mit Hilfe des Entity Framework schnell gute Ergebnisse erzielen.
    Die deutsche Sprache ist Freeware, du kannst sie benutzen, ohne dafür zu bezahlen. Sie ist aber nicht Open Source, also darfst du sie nicht verändern, wie es dir gerade passt.

    MrTrebron schrieb:

    Die Welt nennt Webservices nicht SOAP.


    Sorry, meine .net Zeit ist zu lange her. Ich meine nicht Webservices, sondern Webverweise.
    Siehe MSDN: msdn.microsoft.com/de-de/library/bb628649.aspx
    Diese Dinger sind tatsächlich SOAP-APIs in .net.
    #define true ((rand() % 2)? true: false) //Happy debugging suckers
    Ich gebe KEINE Hilfe per PN! Es gibt für ALLES nen Forum/Thread!
    @Manawyrm API... du bist gut :D Da wüsste ich im Moment noch nicht, wie man das einfach und easy als API bauen kann. Fakt ist ja, dass man so oder so jedes Statement einzeln definieren muss - zumindest auf PHP-Seite. Da fällt mir bislang noch nichts ein, wie der Teil automatisierbar wäre...
    Das Übertragen dann - wie von dir vorgeschlagen - über JSON; soweit so gut.

    Interessant wäre es jetzt natürlich, jede Verbindung nochmal abzusichern (z.B. mit einem bei jeder Verbindung generiertem Hash-Wer oder so).
    Man könnte natürlich sogar so weit gehen, dass die PHP-Datei, die serverseitig ausgeführt wird, bei jeder Connection (oder zumindest bei jedem Programmaufruf) neu generiert wird (und die benötigten SQL-Statements enthält). Aber ich fürchte, das wäre nicht sinnvoll und ressourcen-Verschwendung ;)

    Aber mal sehen - bin ja noch ganz am Anfang. Quasi noch bei der Theorie.
    Chris' Weblog - Mein Blog rund um Vieles :D