Eine Verbindung zur einer MySQL Datenbank sicher herstellen?
-
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.cppAuf Github gibt es auch ein weiters Beispiel, welches auf dem original Beispiel von der Boost Asio Dokumentation aufbaut.
https://github.com/alexandruc/SimpleHttpsClientDas 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
-
@Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
Und Genau das was du auf dieses Bild siehst, geht mir auf die Nerven.
Ich kann verstehen dass dir das auf die Nerven geht. Aber die Frage ist mMn.: ist es wert sich viel viel mehr Arbeit zu machen, nur damit es dir nicht auf die Nerven geht?
Davon abgesehen gibt es ja wohl Obfuscator Tools die auch noch mit .NET 7 funktionieren. Ich weiss nicht ob es gratis Tools gibt, aber ein paar hundert Euro für ein solches Tool sollten ja kein Problem sein wenn du deine Software verkaufen willst. Und wenn du sie nicht verkaufen willst, dann sehe ich keinen Grund irgendwas geheim halten zu wollen.
-
Und selbst die Tools bieten keine 100% garantie dass der Code dann nicht doch "decompiliert" wird.
Laut
https://blog.ndepend.com/in-the-jungle-of-net-obfuscator-tools/
gibt es de4dot welches die Aktionen von "popular obfuscators" rückgängig machen kann.
Was aus meiner Sicht auch nicht all zu verwunderlich ist, denn die .Net Runtime bzw. entsprechende Frameworks arbeitet sehr stark mit Reflection und Co.
Daher können dies Obfuscator Tools auch nur begrenzt was machen ohne dass die Applikation nicht mehr sauber läuft nachdem die Obfuscator Tools ihre Arbeit gemacht haben.Auch wenn de4dot auf github archviert ist und anscheinend nicht mehr weiterentwickelt wird, ist es ein Beispiel dafür, dass man die Leistung von Obfuscator Tools nicht überbewerten sollte.
Und auch ein, wie ich finde wichtiger quote, bezüglich Obfuscator Tools:
https://blog.ndepend.com/in-the-jungle-of-net-obfuscator-tools/.NET Obfuscators that work are more the exception than the rule.
Um irgendwelche Geheimhaltungswürdigen Algorithmen/Logiken geheim zu halten ist es aus meiner Sicht das bessere vorgehen diese Elemente dort ablaufen zu lassen wo man die volle Kontrolle hat.
Was bei einer Software, welche von Endkunden genutzt werden soll, nie gegeben ist.Da du eh wegen der Datenbank einen Server hast, könnte man diese Elemente dann auf der Serverseite ablegen/ablaufen lassen.
Edit: Auch dieser Quotes sollte man beachten:
https://blog.ndepend.com/dont-rely-on-someone-else-to-protect-your-software/Keep in mind that Obfuscators and AOT don’t protect your code from hackers. It is still easy for any solid hacker to crack your license-checking-layer and provide a free version of your software online as a warez.
But keep in mind that Obfuscators and AOT only protect the intellectual property to some extent. Your code best kept secrets are still executable in both scenarios, it means they are still there. Someone skilled ready to spend a large amount of time to reverse engineer your code can still have access to your intellectual property.
-
@firefly @hustbaer Bis jetzt können nur einige Obfuscator .Net 6 und das auch nur, wenn man im Source einige Codes einfügt, damit der Obfuscator überhaupt mit .Net 6 Arbeiten kann. Und warum sollte ich Geld ausgeben? Normalerweise sollte das von MS ja grundverschleiert sein, schließlich wollen die ja auch das man C# nutzte. Statt immer mehr UIs rauszuwerfen die so verhunzt und ja wunderbar an den Store gebunden sind und erst ab Win 10 genutzt werden können, sollten die mal lieber mehr in Sicherheit machen. Das Problem existiert schon seit Jahren.
Selbst im Dot Net Core, war dieses Problem da, obwohl das Net Core mehr für den Business Bereich war. Ich kenne einige Firmen die Software Technisch von C# aus diesen einen Grund weggegangen sind. Einige Firmen sind nur Aktiv in C# geblieben wegen Unity 3D, weil es da wirklich einfacher ist. Ich weiß das man die UIs befreien kann, aber muss das erst meine Aufgabe werden, wieso habe ich nicht die Wahl, ob ich für den Store entwickeln möchte, oder doch lieber Frei.
Leute, konzentrieren wir uns doch einfach auf C++. Mein Plan ist es jetzt durch die Curl Geschichte über Json bzw. REST API zu gehen und darüber abzusichern. Ich werde erstmal für den Anfang das wxwidgets nutzen und dann ist auch gut. In der WinAPI kann ich soweit alles schreiben. Bunte Texte mit Transparenten Hintergründen, sowie das Speichern und Lesen von txt Datei mit OpenFileDialog und eine Serielle Schnittstelle zur einen Arduino habe ich aufgebaut.
Achja ein Thread hab ich auch schon erstellt So blöd läuft das ganze garnicht. Meine einzige Schwachstelle ist nicht die Sprache, sondern das Verständnis über HTTP Request und in diesem fall jetzt REST API. Aber das Kommt bestimmt auch nicht
PS. Kann man sich in diesem Forum auch Vorstellen? Hab nichts dazu gefunden?
-
@Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
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
Nein. EF Core soll es dir erleichtern mit deinen daten umzugehen. Entities, Models, Relations, Resources etc. Den connectionstring zu parsen und eine verbindung zur DB herzustellen ist definitiv nicht die hauptaufgabe eines Entity Managers.
Du wirst immer eine middleware brauchen um von einem untrusted client irgendwo hin zu connecten. Spielt keinerlei rolle ob das c#, cpp, java, python oder f90 ist.
Edit: Interessant....der thread hatte die restlichen beitraege nicht geladen.
-
Welche restlichen beträge wurden nicht geladen?
-
-
Und wie ich das mache, bin am überlegen ob ich einen neuen Beitrag machen sollte?
Obwohl das Thema hier erst aufkam?Ich poste die Frage doch erstmal hier:
@hustbaer Du hattest mir, libCurl empfohlen: Klappt alles super, außer eines, ich versuche aus testzwecken, mich über REST API über Json zu verbinden, das ganze läuft derzeit über Wordpress. Seitens Wordpress und API ist alles eingerichtet, denn testen konnte ich die ganze API über Postman.Jetzt habe ich aber das Problem, das ich keine SSL Verbindung zum laufen bekomme:
Im Code als Kommentar, steht auch das was ich eventuell falsch verstanden haben könnte.curl = curl_easy_init(); curl_easy_setopt(curl, CURLOPT_URL, "https://wordpressapi.ddev.site/wp-json/wp/v2/posts"); curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 1); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 2L); // Diese möglichkeit habe ich getestet, allerdings verstehe ich die Anwendung nicht. // Ich soll ein Zertifikat runterladen das man bei LibCurl zum Download bekommt, diese dann umbenenne in: ca-bundle.crt und eines im Programm Ordner // sowie ein eine Copy auf den Server ablegen. // Der Fehler bleibt der Selbe: failed: SSL connect error oder unter den Fehlercode 35 zu finden: https://curl.se/libcurl/c/libcurl-errors.html // Vielleicht könnt mir an Hand eines Beispiels / Erklärung dabei helfen dieses Problem in den Griff zu bekommen. curl_easy_setopt(curl, CURLOPT_CAINFO, "ca-bundle.crt"); struct curl_slist* headers = NULL; curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } curl_easy_cleanup(curl);
Ich hoffe ihr könnt mir da weiterhelfen?
-
https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html hast Du gelesen?
Ich soll ein Zertifikat runterladen das man bei LibCurl zum Download bekommt, diese dann umbenenne in: ca-bundle.crt und eines im Programm Ordner sowie ein eine Copy auf den Server ablegen.
Ich glaube nicht daß dieses Zertifikat die URL Deines Servers beinhaltet.
-
Erstmal unabhängig vom eigendlichen Problem. Gib als URL bitte https an statt http.
Dann wird der redirect auf die https version vermieden. Spart zeit beim Verbindungsaufbau.Nun zum eigendlichen probelem.
Kann es sein, dass das SSL zertifikat auf dem Server "wordpressapi.ddev.site" ein self signed zertifikat ist?Wenn ja dann ist es kein Wunder dass curl die Verbindung abbricht weil folgende Optionen gesetzt sind:
CURLOPT_SSL_VERIFYPEER
CURLOPT_SSL_VERIFYHOSTSelf-signed Zertifikate werden bei default nicht vertraut weil dem Aussteller des zertifikats nicht vertraut wird.
Vermutlich hast du bei Postman ähnliche Optionen nicht aktiv, da es damit funktioniert.
Deshalb beschäftige dich damit wie das mit den SSL Zertifikaten funktioniert.
-
@firefly Ne das mit dem http habe ich nur zu Testzwecken drin. da steht eigentlich https drin und die CURLOPT_SSL_VERIFYPEER und CURLOPT_SSL_VERIFYHOST habe ich entfernt, gleiches Problem.
Der Fehlercode beschreibt:
Seit mir nicht böser, aber etwas mehr Hilfe dies bezüglich wär echt nett. Bei Postman ist es auch https und läuft ohne Probleme.Der Fehlercode besagt:
A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.Das Problem besteht schon mit Zwei Unterschiedlichen Server, der eine Server wird durch Plesk verwaltet und bietet Domaingebundene Zertifizierungen und der andere läuft über einen Docker, allerdings hast Docker recht, das Zertifikat ist selbst erstellt werden mkcert.
PS. Hab nochmal den Code etwas umgeschrieben:
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET"); curl_easy_setopt(curl, CURLOPT_URL, "https://wordpressapi.ddev.site/wp-json/wp/v2/posts"); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https"); struct curl_slist* headers = NULL; headers = curl_slist_append(headers, "Authorization: Bearer Mein Tocken"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); curl_mime* mime; curl_mimepart* part; mime = curl_mime_init(curl); part = curl_mime_addpart(mime); curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime); res = curl_easy_perform(curl); curl_mime_free(mime);
Ändert aber nichts an das Problem.
-
@Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
You really want the error buffer and read the message there as it pinpoints the problem slightly more.
-
@Swordfish sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
You really want the error buffer and read the message there as it pinpoints the problem slightly more.
Schön das dort der Fehlerspeichert benannt ist, das hab ich auch lesen können, nur welcher Speicher ist gemeint und wie lese ich diesen aus?
-
https://curl.se/libcurl/c/CURLOPT_ERRORBUFFER.html
Also ein bisschen eigeninitiative musst du schon an den tag legen, sonst wird das weder mit cURL, noch mit cpp was.
-
@Cardiac Danke für den Link, aber wie du im Ganze Thread lesen kannst, hab ich häufig vieles hier selbst gemacht. Ohne wirkliche Hilfe an Beispielen.
Außer natürlich die Tipps zubekommen.Der Fehler ist jetzt:
libcurl: (35) schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - Die Sperrfunktion konnte keine Sperrprüfung für das Zertifikat durchführen.Es gibt einige Beiträge dazu, nur für mich nicht nützlich.
-
Probiers mal mit
CURLSSLOPT_NO_REVOKE
. https://curl.se/libcurl/c/CURLOPT_SSL_OPTIONS.html
-
@Swordfish sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
CURLSSLOPT_NO_REVOK
Das hat super geklappt, danke dir. Ich bekomme eine Ausgabe die den Inhalt der Json ausgibt. Jetzt ist das aber so, das der ganze kram unformatiert, also ungeordnet ausgegeben wird:
[{"id":1,"date":"2022-11-27T12:37:28","date_gmt":"2022-11-27T12:37:28","guid":{"rendered":"https:\/\/wordpressapi.ddev.site\/?p=1"},"modified":"2022-11-27T12:37:28","modified_gmt":"2022-11-27T12:37:28","slug":"hello-world","status":"publish","type":"post","link":"https:\/\/wordpressapi.ddev.site\/2022\/11\/27\/hello-world\/","title":{"rendered":"Hello world!"},"content":{"rendered":"\n<p>Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Jetzt frage ich mich, ob man das ganze auch so anzeigen lassen kann, wie in Postmann:
[ { "id": 1, "date": "2022-11-27T12:37:28", "date_gmt": "2022-11-27T12:37:28", "guid": { "rendered": "https://wordpressapi.ddev.site/?p=1" }, "modified": "2022-11-27T12:37:28", "modified_gmt": "2022-11-27T12:37:28", "slug": "hello-world", "status": "publish", "type": "post", "link": "https://wordpressapi.ddev.site/2022/11/27/hello-world/", "title": { "rendered": "Hello world!" }, "content": { "rendered": "\n<p>Welcome to WordPress. This is your first post. Edit or delete it, then start writing!</p>\n", "protected": false
Ich weiß das die Ordnung für C++ nicht wichtig ist, nur finde ich das nicht gerade leserlich.
Die Zweite frage: Ist das CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_ALLOW_BEAST | CURLSSLOPT_NO_REVOKE auch kein Problem, denn wie ich das verstanden habe, ist das unter Windows nicht anders zu umgehen. Allerdings legt der CURLSSLOPT_ALLOW_BEAST die Option: keine Umgehungslösungen für eine Sicherheitslücke in den Protokollen SSL3 und TLS1.0 zu verwenden fest. Was ja gut klingt oder hab ich das falsch verstanden?
-
@Lucius sagte in Eine Verbindung zur einer MySQL Datenbank sicher herstellen?:
Jetzt frage ich mich, ob man das ganze auch so anzeigen lassen kann
https://www.example-code.com/cpp/json_pretty_print.asp
ad 2: Ich hab keine ahnung von curl oder ssl. Aber Deine "Probleme" kann ich in < 2 Minuten googelei lösen. Lern recherchieren!
-
@Swordfish Tut mir leid, aber wenn du mir schon unterstellst, das ich nicht richtig Recherchiert habe, dann solltest du allerdings mir schon für die Richtige Lib den Link Schicken, nach Json zu Google und dann behaupten das du keine 2 min dafür gebraucht hast, ist schon eine Frechheit, des Weiteren geht es mir darum mit LibCurl dies zu sortieren und nicht mit Json und wenn du dich Genötigt fühlst mir helfen zu Wollen, dann überspring bitte meinen Beitrag / Fragen die dir nicht gefallen.
Du kannst davon ausgehen, das ich jedes mal vorher nach allen Möglichkeiten Recherchiert habe, bevor ich hier rein Schreibe, ich dachte immer, das Foren genau auch dafür gedacht waren, Hilfe zu ersuchen. Achja, vielleicht sollte man sich auch mal die Frage stellen, das Einfänger nicht am Anfang wissen wonach Sie suchen müssen.
Ich Zwing doch hier keinen mir zu Antworten oder mir zu Helfen, aber wenn man doch Vorschläge bekommt und diese nachgeht, dann ist das doch schon gut.
Hilfe muss ich in einem Forum erwarten können, denn alles Recherchieren ist nur möglich wenn man auch weiß wonach.