Eine Verbindung zur einer MySQL Datenbank sicher herstellen?



  • @Lucius Nochwas: ich kann dir nur raten dein Englisch zu verbessern. Wie du selbst schon festgestellt hast, findet man kaum deutsche Doku und auch ansonsten nur wenig wirklich gute Infos. Wäre mMn. auch verschwendete Zeit sowas zu produzieren. Also Doku in zig verschiedene Sprachen zu übersetzen. Und Englisch ist sowieso praktisch wenn man es gut kann, ist ja quasi fast das ganze Internet in Englisch.

    Persönlich hab' ich erst gut Englisch gelernt als ich angefangen habe Filme/Serien auf Englisch zu schauen - und dann etwas später Bücher (belletristik) auf Englisch zu lesen. Und Doku auf Englisch lesen hilft natürlich auch - je mehr du das machst, desto leichter fällt es. Am Anfang muss man noch öfter mal Wörter nachschlagen, aber das wird schnell besser.



  • @hustbaer Da gebe ich dir recht, mein Englisch kann wirklich besser werden. Werde ich zu Herzen nehmen, da mich das selbst stört.

    Wenn ich dich richtig verstanden habe, müsste das dann so aussehen:

    char* encoded = curl_easy_escape(curl, "name=test", 0);;
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, encoded);
    

    Oder habe ich dich missverstanden? Also das mit der Variable 1 und 2 habe ich nicht wirklich verstanden.

    Das CURLOPT_POSTFIELDS wollte ich eigentlich in mehreren eingaben unterteilen, so das dies aus einer Variable statt statisch mit name=blabla steht.

    Da ich ja wesentlich mehr als nur ein String bei der PHP anfragen müsste, muss ich die CURLOPT_POSTFIELDS einer Variable versehen, damit diese auch wachsen kann. In den Dokus habe ich dies bezüglich nichts gefunden. Base64 ist auf meiner Liste 😀

    Ist das Normal, das ich in Wireshark keinerlei Bewegung unter http feststelle?



  • Ich frage nochmal: Warum machst du dir das leben so schwer und verwendest curl direkt (oder boost oder irgendeine andere relativ low level library?)

    Nutze https://github.com/libcpr/cpr oder irgendeine andere besser abstrahierte Library.

    Evtl. solltest du dir sogar überlegen erstmal gar keinen Client zu schreiben. Schreib doch erstmal deinen Server und teste ihnen mit einem HTTP Tool deiner Wahl (z.B. https://www.advancedrestclient.com/, https://www.postman.com/).



  • @Leon0402 Ne keine Sorge, ich habe die LibCpr auf der Liste. Danke für die Links: Postman kenne ich schon, aber das Advanced rest client kannte ich noch nicht. Gibt es ein Unterschied oder machen beide das gleiche ? Advanced REST Client ist ja OpenSource, Postman kostet ab bestimmten Konditionen.



  • @Lucius Es sollte auf deiner Liste ganz oben stehen. Zumindest weit vor Curl. Um genau zu sein sollte curl gar nicht erst auf der Liste stehen. Offensichtlich sieht deine Liste aber nicht so aus, denn du hast ja oben Beispiele mit Curl und Boost gezeigt, die geschrieben wurden.

    Ich verstehe ja deine Motivation dahinter von wegen, erstmal alles "richtig" lernen. Wer das noch nie gedacht hat, werfe den ersten Stein 🙂 Aber du erweckst den Eindruck als hättest du von HTTP und co wenig Ahnung hast. Das führt dann eher dazu, dass du Try & error mäßig dich da durchprobierst und die Hälfte wahrscheinlich von Stack Overflow zusammenkopierst. Das hat drei Dinge zur Folge:

    1. Du hast viel länger gebraucht, um dein Ziel zu erreichen
    2. Deine Lösung ist komplexer und mit Sicherheit auch nicht optimal (gibt ja viel mehr was man falsch machen kann, insbesondere wenn man keine Ahnung davon hat)
    3. Du hat es mit Sicherheit nicht "richtig" gelernt, sondern aller höchstens falsch 😉

    Darüber hinaus ist auch die Frage, was überhaupt "richtig" heißt. Möglichst viel von Hand und Low Level machen ist nicht, was die meisten als richtig betiteln würden. Man sollte sich in erster Linie das Leben nicht zu schwer machen. Mit ner höheren Programmiersprache mit C++ und ner Library für HTTP hast du immer noch genug neues zu lernen. Möglicherweise, gegebenfalls, unter Umständen macht es dann nochmal Sinn irgendwann das ganze sich etwas low level anzugucken. Z.B. auch bisschen Assembler zu können schadet nicht. Man kommt aber auch ganz gut durch, wenn man es nicht kann 😃 Das kommt dann immer etwas drauf an, was man konkret macht.

    Dasselbe gilt auch für Qt etc. ... klar kannst du auch alles mit OpenGL selber machen oder so. Sinnvoll ist das aber i.d.R. nicht. QT ist auch herausfordernd genug, aber es macht das Leben eben doch ein bisschen leichter. Lehne gerne QT ab, weil es etwas zu groß ist (und wirklich nen ganzes Framework ist) oder weil du die Lizenz komisch findest (du kannst es kommerziell aber nutzen) oder weil du einfach das Unternehmen nicht mag. Aber lehne es bitte nicht ab, weil du denkst, du würdest besser lernen (und schneller schon mal gar nicht), wenn du direkt mit Low Level Kram beginnst 😃
    Es gibt auch zahlreiche Alternativen zu QT.

    Zu deiner Frage mit Postman. Kein Plan. Kann glaube ich schon deutlich mehr, mir hat der Advanced Rest Client meistens gereicht. Ist jetzt aber auch nicht so als würde ich da tagtäglich 8h mit arbeiten.



  • @Leon0402 Ich unterteile eben das ganze mal:

    Du hast recht: LibCpr sollte oben auf meine Liste stehen, aber was ich überhaupt nicht verstehe ist warum? Was macht es besser als die Usability?
    Natürlich kann ich mir einiges damit erleichtern, mir geht es aber auch darum die anderen Libs kennenzulernen, für ein Anfänger in Sachen C++ ist es sehr schwer, sich auf andere dinge einzulassen, wenn man die dinge die man benutzt oder eher benutzen will, überhaupt noch nicht versteht.

    Der HTTP Header ist für mich kein Geheimnis sondern eher nur ein Rätzel, ein Beispiel:
    Im Boost.Asio hatte ich durch die anderen zusätzlich festgestellt, das bei einer Domain die SSL besitzt, die Request anfrage nicht auf port 80 Funktion, sondern ich diese über SSL ansteuern muss. Wie genau weiß ich noch nicht. Jetzt ist es aber so, wenn man im Header also unter HOST: eine andere Domain wie: stackoverflow.com als die eigene, die man eintragen hat, ausführt, mir dann ohne weiteres meine html Datei über denselben weg, trotz fehlender SSL Verbindung mit dem 200 OK ausgelesen bekomme, wie kann das sein? 🤓

    std::stringstream getRequest;
    		getRequest << "GET / HTTP/1.1\r\n";
    		getRequest << "Host: stackoverflow.com\r\n";
    		getRequest << "Connection: keep-alive\r\n";
    		getRequest << "User-Agent: C/1.0";
    		getRequest << "Content-Type: application/x-www-form-urlencoded\r\n";
    		getRequest << "Accept: */*\r\n";
    		getRequest << "Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4\r\n";
    		getRequest << "\r\n";
    
    boost::asio::ip::tcp::resolver::query query("domain.de", "80");
    resolver.async_resolve(query, resolveHandler);
    
    ioservice.run();```cpp
    

    Eigentlich sollte genau dieselbe Meldung mit 301: Moved Permanently kommen, das aber passiert nicht.
    Sollte dies eine Sicherheitslücke sein, dann fragt sich: Kommt diese aus Boost, oder vom HTTP Header selbst?

    QT ist für mich kein Schlechtes Framework, sondern eher die Lizenz Vereinbarung dahinter. Auch wenn man kommerziell diese verwenden darf, besagt die Lizenz: Das man bei einer Änderung der Lizenz das recht hat, im Nachhinein, dies und jenes zu verbieten, obwohl ich die Version von QT schon lange verwende. Ich würde ja verstehen, wenn man die neuen Versionen unter der neuen Lizenz verankert, aber doch nicht die, die ich schon verwende.

    wxWidgets ist meiner Meinung nach viel besser, nicht aus der Sicht der Usability, allerdings erwarten mich da keine Bösen Überraschungen. Ich habe bereits mir QT angesehen und eigentlich ist das schon eine Geile Sache, aber die Lizenz ist eine reine Zumutung. Natürlich muss das jeder einzelne für sich entscheiden, ob er solch einer Lizenz zustimmt. Und mit Mögen hat das weniger zu tun.

    Aber heute laufend des Tages, werde ich mir das Cpr ansehen. Obwohl das eher danach aussieht, das man APIs ansteuern kann, muss ich erstmal herausfinden, wie man das im Bereich Request zur einer PHP verwendet. Ich lerne eher aus Beispielen, ich habe So viele Bücher zuhause, die mir zwar die Details erklären und das ist toll, aber es bringt nichts, wenn ich nicht weiß, wie ich diese in der Praxis anwende 😄



  • @Leon0402 boost::asio::ip::tcp ist auch kein library für das HTTP Protokoll!
    Es implementiert nur das TCP Protokoll.

    Nochmal meine Frage wieso willst du hier umbedingt C++ verwenden und nicht C# was du anscheinend schon kennst.

    Du hast aktuell das Problem, dass du dich in C++ und das HTTP Protokoll einarbeiten musst, weil du von beidem bisher null Ahnung hast



  • @firefly In C# stört es mich sehr, das man die exe ohne weiteres Dekompilieren kann. Mir ist bekannt, das es mittel und wege in c++ gibt, auch diese auszulesen. Mir geht es aber darum, das C# durch die ganzen Frameworks, ständig aktualisiert werden. Dummerweise wurde das Dot Net Core mit dem heutigen .Net 6 und schon draußen das .Net 7 zusammen gelegt. Eigentlich keine Schlechte Idee, allerdings irgendwie doch. Wie wir MS kennen, verschlimmbessern die ständig irgendwelche dinge.

    Auch wenn ich mein Programm Dumm Programmiere, das dieses nichts beinhaltet, stört es mich sehr, das ich Offen wie eine Hose bin. in C++ ist der Weg ein ganz anderer. Meine Source verschleiern muss ich in C++ nicht. Klar muss ich dafür andere dinge tun, aber es ist ein anderes Gefühl.

    Ich fühle mich nicht wirklich wohl dabei noch C# zu nehmen. Ich komme von C#, allerdings bin ich eher PHPler und ja Http Header und .Co waren noch nie wirklich Thema bei mir, aber dennoch bin ich darin Stärker als in C#. C# war nur die Wahl wegen der WPF. Ansonsten finde ich die ständigen .Net Updates nervig. Ich will auch nicht sagen das C# eine Schlechte Sprache ist, ganz im gegenteil, aber Was mich auch an das CLI von MS stört, ist die Tatsache, das es Frameworks wie das Entity Framework gibt, eigentlich total genial ist, aber durch die Gegebenheit, das auch dieses Framework Zugang zur MySQL etc. braucht, nicht so ohne weiteres verwendet werden kann.

    Ablegen im Code geht also auch nicht. Ich müsste mich wieder aktiv in C# einlesen, welche dinge neu sind und wie ich diese am besten anwende, da kann ich direkt eine neue Sinnvolle Sprache lernen, die mir einiges mehr bietet. Komfort ist mir nicht wirklich wichtig. Klar wäre es schön, sowas wie WPF zuhaben, aber der Preis ist mir einfach zu Hoch. Das Intervall der Updates eines Frameworks ist mir auch einfach zu kurz.



  • Was willst du den "verschleiern", was man oft nicht rein durch die Verwendung des Clients herausfinden kann?
    Denn das DB PW kann es ja nicht mehr sein,denn das liegt in der konfiguration des Webservers mit dem der Client via HTTP requests kommuniziert



  • @firefly Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss. Im Programm Hardcoden ist natürlich keine Option. Und verschleiern möchte ich mein Source-Code. Ich habe zwar ein Obfuscator, der das kann, allerdings nur für .Net Framework 4.8 wie gesagt, die kurzen Update Intervalle Einens Frameworks ist viel zu Kurz, klar braucht man nicht immer das neuste, aber Aktuell halten muss ich trotzdem irgendwann mal.



  • Ich verstehe jetzt echt nicht was das Problem ist. Lerne C++, lerne wie HTTP-requests auszusehen haben. Stell einen Server hin, lass einen Webserver drauf laufen der PHP ausführen kann. Schreib Deine Middleware in PHP und alles ist gut!?



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss. Im Programm Hardcoden ist natürlich keine Option.

    Öhm Wieso muss man das tun? Nur weil das Framework so was anbietet, ist es noch lange kein muss. Und das als Begründung wieso C# überhaupt nicht in Frage kommt ergibt für mich keinen sinn.
    Die restlichen Gründe schon, aber das hier nicht.

    Du kannst In C# genau das selbe tun was du jetzt mit C++ vorhast.
    Einen Client schreiben, welcher via HTTP Requests mit einem WebServer spricht um daten abzufragen/zu ändern. Egal ob die Daten dann auf Serverseite in einer DB oder sonst wie abgelegt sind.
    Mit C# ist es sogar zum teil einfacher weil die entsprechenden Klassen Bestandteil des .Net Framework sind (Stichpunkt HttpClient).

    @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    die kurzen Update Intervalle Einens Frameworks ist viel zu Kurz, klar braucht man nicht immer das neuste, aber Aktuell halten muss ich trotzdem irgendwann mal.

    Das gleiche Problem hast du auch mit C++. Und zwar musst du die verwendete Third-Party library, welche du für HTTP Requests nutzt, auch regelmäßig aktuell halten.

    Ich habe irgendwie das Gefühl du vermischst hier mehrere Themen/Punkte:

    1. Welche Sprache wird für die Erstellung des Clients benutzt
    2. Daten sollen in einer DB abgelegt werden und wie greift der Client darauf zu
    3. Zugangsdaten für die DB sollen geschützt werden.

    Aufgrund deiner Aussagen scheinst du die Punkte 1 und 2 zu vermischen wenn es um das .Net Framework bzw. C# geht.
    Nur weil es für das .Net Framework das Entity Framework gibt, welche auch direkt mit einer DB kommunizieren kann, heißt das nicht, dass man das generell so machen muss.
    Falls das Entity Framework das nur so kann, dann ist diese Framework dann schlicht die falsche Wahl um damit den Client zu entwickeln.

    Ansonsten kann ich mich nur anschließen was Swordfish gesagt hat.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Wenn ich dich richtig verstanden habe, müsste das dann so aussehen:

    char* encoded = curl_easy_escape(curl, "name=test", 0);;
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, encoded);
    

    Oder habe ich dich missverstanden?

    Du hast mich misverstanden 🙂
    So wie du das schreibst, wir der String "name=test" als ganzes URL-encoded. Das ist aber nicht Sinn der Sache. Das = Zeichen soll ja nicht encoded werden. Das ist ja das Trennzeichen zwischen dem Parameter-Namen und dem Wert.

    Also das mit der Variable 1 und 2 habe ich nicht wirklich verstanden.

    Das CURLOPT_POSTFIELDS wollte ich eigentlich in mehreren eingaben unterteilen, so das dies aus einer Variable statt statisch mit name=blabla steht.

    Da ich ja wesentlich mehr als nur ein String bei der PHP anfragen müsste, muss ich die CURLOPT_POSTFIELDS einer Variable versehen, damit diese auch wachsen kann. In den Dokus habe ich dies bezüglich nichts gefunden.

    Ich denke ein kleines Code-Beispiel ist einfacher als wenn ich versuche es mit Worten zu erklären...

    #include <string>
    #include <string_view>
    #include <memory>
    #include <iostream>
    
    #include <string.h>
    #include <limits.h>
    
    #include <curl/curl.h>
    
    struct FreeDeleter {
        void operator()(void* p) {
            free(p);
        }
    };
    
    template <class T>
    using UniqueFreePtr = std::unique_ptr<T, FreeDeleter>;
    
    // ACHTUNG: `name` darf keine Zeichen enthalten die URL-encoded werden müssten!
    void appendPostFieldParamAndValue(std::string& inout_postFields, CURL* easy, std::string_view name, std::string_view value) {
        if (value.size() > INT_MAX)
            throw std::runtime_error("meh");
        UniqueFreePtr<char> encodedValue{curl_easy_escape(easy, value.data(), static_cast<int>(value.size()))};
        if (!encodedValue)
            throw std::runtime_error("meh2");
    
        if (!inout_postFields.empty())
            inout_postFields.push_back('&');
    
        inout_postFields.append(name);
        inout_postFields.push_back('=');
        inout_postFields.append(encodedValue.get());
    }
    
    int main() {
        try
        {
            CURL* curl = curl_easy_init();
            if (!curl) {
                throw std::runtime_error("meh3)");
            }
    
            // Die Parameter die wir schicken wollen:
            std::string name = "Bob der Baumeister";
            std::string kundenNr = "123";
            std::string nochwas = "a, b, c";
    
            // Post-fields string aus den einzelnen Parametern bauen...
            std::string postFields;
            appendPostFieldParamAndValue(postFields, curl, "name", name);
            appendPostFieldParamAndValue(postFields, curl, "kundenNr", kundenNr);
            appendPostFieldParamAndValue(postFields, curl, "nochwas", nochwas);
    
            std::cout << "POST fields: " << postFields << "\n";
    
            curl_easy_cleanup(curl);
        }
        catch (std::exception const& e) {
            std::cout << std::endl << "Fehler: " << e.what() << std::endl;
            return 1;
        }
    }
    

    Ist das Normal, das ich in Wireshark keinerlei Bewegung unter http feststelle?

    Wenn du über HTTPS kommunizierst, dann ja.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Naja über das Entity Framework kannst du dich mit dem MySQL Server von deiner Geschriebenen Anwendung aus verbinden. Der Nachteil ist, das du trotzdem die Zugangsdaten dafür ablegen muss

    Nein, denn in C# wuerdest du es ebenfalls mit der gleichen middleware handhaben wie du es jetzt auch in cpp machen musst. Wie dir bereits genug leute mittlerweile erklaert haben duerften. Es hat schon seinen grund, warum du die antworten bekommst, die du bekommst.



  • @hustbaer Ich danke dir für das Beispiel. Das stimmt, name=test wollen wir so ja nicht. An Append habe ich überhaupt nicht gedacht 😬
    Ich werde wie alles hier testen, aber vielleicht kannst du mir oben die Frage beantworten, bei Boost.asio: Warum SSL auf einmal kein ding ist, wenn im Host: eine andere Domain drin steht?

    @Swordfish, @firefly und @Cardiac Ich glaube ihr Missversteht mich, das Entitiy Framework ist eigentlich eine gute Lösung, aber leider wie immer nur Halb durchdacht. Ich verstehe ehrlich gesagt eure Fragen nicht mehr: Warum sollte ich C# Verwenden wenn ich mich explizit auf C++ konzentriere? Ich habe in dem Formabschnitt für C++ rein geschrieben. Nicht bei C#. Ich habe jetzt schon Oft erklärt warum ich nicht mehr in C# Programmieren möchte. 😉

    Nachtrag: Ja stimmt, auch da braucht man die Middleware, obwohl das nur zum Teil Richtig ist. Das Entitiy Framework soll es ja einem erleichtern, Verbindung zur Datenbank aufzubauen, da gibt es keine Middleware. Das Einzige was man zusätzlich dann tun muss, ist ein weg zu finden die Zugangsdaten da abzulegen wo Sie sicher sind. Diese Tatsache könnte man dann Middleware nennen.

    Auch wenn man das vielleicht nicht wirklich nachvollziehen kann, warum auch immer? Ich könnte genauso gut in Java Programmieren, warum tu ich das nicht? Weil mein Source Code nicht für die Öffentlichkeit sein soll. Macht man bei PHP, JS Webseiten ja auch nicht, das die Source frei liegt. Es gibt viele Copy & Paste User, die nichts anderes machen, als den Code zu Kopieren und im eignen Projekt einzufügen.

    Solche Leute nennen sich dann Programmierer. Wenn man dadurch lernt, weil man wie durch Beispiele besser versteht ist das in Ordnung. Es ist auch in Ordnung wenn man von sich aus Helfen möchte oder seinen eignen Code zu Verfugung stellt. Aber in Java / C# werde ich Quasi dazu gezwungen. Ich habe auch nichts gegen Open Source, wenn man sich selbst dafür entschieden hat, ist das Super.

    Weil es einfacher ist, sollte ich C# nutzen? Ist es nicht, es hat wie C++ Vor und Nachteile. Natürlich bekommt man vieles auf dem Teller serviert, nur Wissen erlangt man dadurch nicht mehr wirklich.

    Wenn man alles abgenommen bekommt, lernt man auch nichts mehr. Ich sehe den ganzen Kram in PHP. Nimm dies und jene Framework, ist doch dann viel einfacher. Natürlich wenn man die dinge die man braucht schon X mal in PHP Vanilla Programmiert hat, sehe ich da auch kein Thema eine Abkürzung zu nehmen. Auch in der Firma, wo der Chef einen auf die Füße tritt weil das zu Lange dauert, macht dann sinn.

    Man kann doch Abkürzungen nehmen, dagegen sage ich nichts, aber man sollte in der Lage sein, auch ohne Frameworks und .Co zu programmieren. Deshalb habe ich die Grundlagen C++ und WinAPI gemacht. Und glaubt mir, durch die WinApi habe ich wesentlich mehr gelernt als gedacht. Die Console ist nicht immer gut 🙃

    Aktuell halten muss man jede Software die man geschrieben hat. Aber MS hat bis jetzt ab 2020 mit .Net 5 jedes Jahr ein Versionswechsel vorgenommen:

    Nov 2020 .Net 5
    Nov 2021 .Net 6
    Nov 2022 .Net 7
    Nov 2023 .Net 8

    Klar muss man nicht jede Net mitnehmen. aber dennoch macht es sinn, alle 2 Jahre. Wenn es Aktualisiert wird, dann muss das ganze Projekt wenn man Pech hat, jedes mal überarbeitet werden. Natürlich muss ich die Libs etc. auch Aktualisieren, nur hier ist nicht das ganze Projekt betroffen, sondern eventuell einige Teile des Programms. Außerdem ist ein Update der einzelnen genutzten Lib überschaubar, bei Net muss man erstmal Kilometerlangen Changelog durch Arbeiten.

    Obfuscator sind im Profi Bereich die .Net 6 können sehr teuer, wär das nicht so, dann würde ich vielleicht darüber nachdenken, C# nebenbei auch aufzubauen. Und bei .Net Framework 4.8 zubleiben ist keine Gute Lösung.

    So ich hoffe, jetzt sind alle Fragen bezüglich C# geklärt. Bitte seid mir nicht Böse, aber das ist halt meine Sicht auf die dinge. Ich verstehe ja auch eure Beweggründe mir das vorzuschlagen, aber wenn man sich zum X. Mal rechtfertigen muss, nervt das schon ein wenig. Sollte ich bei C++ komplett nach Wochen / Monaten versagen, dann werde ich freiwillig zurück zu C# gehen 😂

    PS. Eines meiner wichtigsten Argumente C++ zu Lernen und zu Programmieren ist der Spaß an die Sprache. Ja unfassbar, ich finde C++ Cool, auch wenn C++ manchmal sehr Undankbar ist 😀



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    @Swordfish, [...] Ich glaube ihr Missversteht mich

    Lies vielleicht nochmal was ich geschrieben habe.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Ich werde wie alles hier testen, aber vielleicht kannst du mir oben die Frage beantworten, bei Boost.asio: Warum SSL auf einmal kein ding ist, wenn im Host: eine andere Domain drin steht?

    Die "Host" Header ist dafür da mehrere Domains mit der selben IP zu hosten. D.h. du hast einen Server der Webseiten für mehrere Domains hostet, aber alles under der selben IP. Damit der Server weiss welche Seite der Client haben will, schickt der Client die "Host" Header mit. Eine Umleitung die für Host: stackoverflow.com definiert ist greift dementsprechend nicht wenn du Host: was-anderes.com schickst. Das erklärt mal warum du keine Umleitung bekommen hast. Was ich aber komisch finde ist dass du schreibst du hättest ein 200 OK zurückbekommen. Ich hätte eher einen 4xx Code erwartet.



  • @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    @Swordfish, @firefly und @Cardiac Ich glaube ihr Missversteht mich, das Entitiy Framework ist eigentlich eine gute Lösung, aber leider wie immer nur Halb durchdacht.

    Leider Missverstehst du was ich dir sagen wollte.
    Das Entity Framework musst du nicht nutzen, wenn du .net/C# nutzt!
    Auch hier vermischst du wieder die Programmiersprache mit dem zugriff auf die Datenbank. Und begründest damit unter anderem deine Entscheidung C#/.Net nicht nutzen zu wollen.
    Und darauf wollte ich, und auch andere, darauf hinweise, dass du hier einem Missverständnis unterliegst.

    Hier ein Beispiel für einen HTTP Get request mit HTTPClient (Was seit .Net 4.5 existiert) inklusive Nutzung von HTTPS:

    static void Main(string[] args)
    {
        using (var client = new HttpClient())
        {
            //HTTP GET
            var responseTask = client.GetAsync("https://google.com");
            responseTask.Wait();
    
            var result = responseTask.Result;
            if (result.IsSuccessStatusCode)
            {
                var readTask = result.Content.ReadAsStringAsync();
                readTask.Wait();
    
                string responseBody = readTask.Result;
                Console.WriteLine(responseBody);
            }
        }
    }
    

    @Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:

    Und bei .Net Framework 4.8 zubleiben ist keine Gute Lösung.

    Könnte schon. Denn .Net 4.8 wird von Microsoft immer noch unterstützt bis irgendwann eine Windows version gibt, bei dem .Net 4.8 nicht mehr bestandteil der OS installation ist.

    Quellen:
    .Net Framework support lifecycle:
    https://learn.microsoft.com/en-us/lifecycle/products/microsoft-net-framework

    Version Start Date End Date
    .NET Framework 4.8.1 2022-08-09T00:00:00.000-08:00
    .NET Framework 4.8 2019-04-18T00:00:00.000-08:00

    https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-framework

    .NET Framework 4.8 is the latest version of .NET Framework and will continue to be distributed with future releases of Windows. As long as it is installed on a supported version of Windows, .NET Framework 4.8 will continue to also be supported.

    https://blog.inedo.com/dotnet/demystifying-lts

    Version Existing Application Support Target New Applications?
    4.8 ✓ Operating System (indefinite) ✓ Operating System (indefinite)

    Alle anderen Gründe, wieso du .Net/C# nicht nutzen willst sind komplett verständlich.
    Und ich möchte dich jetzt auch nicht davon abbringen C++ zu lernen und zu Nutzen.

    Es ging mir nur darum dir klar zu mache, dass eine deiner Begründungen gegen .Net/C# durch fehlerhafte Annahmen entstanden ist.



  • die Verwendung von Boost Asio für HTTP Requests ist dann doch sehr lowlevel.
    Da wäre es besser eine library zu nutzen die direkt HTTP Requests unterstützt. Einige wurden hier schon genannt.

    Hier ein link zu einem Beispiel code von der Boost Asio dokumentation um eine HTTPS Verbindung aufzubauen:
    https://www.boost.org/doc/libs/1_48_0/doc/html/boost_asio/example/ssl/client.cpp

    Auf Github gibt es auch ein weiters Beispiel, welches auf dem original Beispiel von der Boost Asio Dokumentation aufbaut.
    https://github.com/alexandruc/SimpleHttpsClient

    Das ist schon relativ komplex. Besonders für jemanden, der erst anfängt C++ zu lernen.



  • Mahlzeit zusammen,

    @hustbaer Ja das ist schon merkwürdig.

    @firefly Hey. Ich glaube das wir uns doch missverstanden haben, allerdings ist das eher meine schuld, da ich mit keinster Silbe sage, das dieses Entity Framework nicht die einzige Lösung ist. Ich erzählte davon, da eigentlich dieses Entity Framework eine gute Lösung sein kann. Sowie man sein Programm aufbaut, mit den Strings und .Co die man auch in der Datenbank als Tabelle eventuell benötigt, legt das Framework automatisch die Datenbank an und hält Sie mit deinen Projekt Aktuell. Allerdings nur in der IDE nicht im Nachhinein.

    Und klar, der HttpClient kenne ich, hab ich sogar schon verwendet, aber schau mal dir bitte das ScreenShot an, deine Source habe ich mal auf .Net 7 erstellt und in DotPeek reingeladen: https://i.postimg.cc/T3SXhcp7/Screenshot-2022-11-26-154344.png

    Und Genau das was du auf dieses Bild siehst, geht mir auf die Nerven. Man kann ja .Net Framework 4.8 nutzen, allerdings macht das nicht lange Sinn.
    Man möchte ja auch Neuheiten verwenden können, das in .Net 6 und Co. enthalten ist. Ich hab ja auch gesagt, das ich C# verwenden würde, wenn ich ein Obfuscator für mindestens .Net 6 finden würde, der entweder nicht teuer oder sogar kostenlos ist. Aber so offen wie auf mein Screenshot ist für mich nicht tragbar und ertragbar. Ich kann sowieso nicht verstehen, warum MS da nicht Grund verschleiert. Für 4.8 habe ich einen Obfuscator, der Open Source ist, aber nicht für die neuen Frameworks.

    @firefly Alles gut, ich habe verstanden wie du das meinst 😁 Hat sich ja keiner verletzt 😂


Anmelden zum Antworten