Ich möchte eine C# -Anwendung schreiben, die eine Verbindung zur Datenbank herstellen und einige Informationen zurück erhalten muss. Ich dachte, wenn ich nur die Verbindungszeichenfolge in meiner C# -Anwendung direkt, dann kann der Benutzer sehr einfach sein, die Verbindungszeichenfolge und Anmeldung an meinen SQL-Server direkt, sobald das passiert ist, können sie alle gewünschten Informationen auswählen!
Gibt es also eine gute Lösung dafür?
Vielen Dank im Voraus!Wie kann ich die Informationen vertraulich behandeln?
Antwort
Ich hatte eigentlich eine ähnliche Anforderung. Ich habe es angesprochen, indem ich meine Verbindungszeichenfolge genommen und sie mit der Rijndael-Verschlüsselungslogik verschlüsselt habe (überprüfen Sie es in System.Security.Cryptography). Es ist sehr einfach zu bedienen. Ein Freund von mir hat versucht, dies in den letzten 19 Monaten zu knacken, indem er eine Reihe von Rainbow-Tischen benutzt - ja, er hat viel zu viel Zeit - und hat mir gesagt, dass "unser Sonnensystem wahrscheinlich dunkel wird, bevor ich kann reinkommen. " Ich lachte. Viel zu viel Freizeit.
Ich nahm einfach meine Verbindungszeichenfolge, die ich in einer XML-Datei speichern (so kann ich es bei Bedarf ändern) und verschlüsselt es. Meine App liest diesen Wert als Teil des Initialisierungsprozesses ein - entschlüsselt ihn - und verbindet und öffnet die Datenbank.
So etwas wie „ich ein Stück von Daten bin, der verschlüsselt ist,“ ..... einmal verschlüsselt endet so etwas wie ..... „V27AsTNsJA + BEwoGR2PbiZum5puwiLbfMa41ens8r8sSiEnn6FiT + k8ImEft Qba8ziCpie94s3bEwcPekqRfhO1Noc8lVeERyezmtqN9/0ZgmzJbNbl/3emTLLfb0Qpj“ .. .. das ist offensichtlich nicht sehr nützlich für jemanden versuchen, einzubrechen.
Es ist erwähnenswert, dass selbst mit einer niedrigen 128-Bit-Verschlüsselung (dies unterstützt auch 256-Bit) erinnern, dass es 2 erhöht zur Macht von 128 möglichen Werten, oder 3.4 e + 38. Denken Sie, was eine große Zahl, die ist:
340.000.000.000.000.000.000.000.000.000.000.000.000
Wenn Sie versuchen, diese zu knacken, beispielsweise mit einer Rate von 1 Billion Versuche pro Sekunde (1.000.000.000.000/Sekunde) es möglicherweise Sie könnte nehmen Sie 3 Millionen Millionen Millionen Jahre, um es zu bekommen. Natürlich könnten Sie es bei der ersten Schätzung bekommen ... wahrscheinlich nicht.
Ein 256-Bit-Schlüssel ist 1,15 e + 77 und ein 512-Bit-Schlüssel ist 1,34 e + 154 mögliche Werte.
Die einzige Möglichkeit ist eine dreischichtige Architektur, bei der Ihre Clientsoftware nicht direkt mit der Datenbank verbunden ist, sondern mit einem Anwendungsserver, der die Datenbankanmeldeinformationen steuert und angibt, welche SQL-Befehle ausgegeben werden.
Es ist auch möglich (unwahrscheinlich), die Berechtigungen einzuschränken, die der Datenbankbenutzer für die Client-Software nur in der Lage sein muss, die Daten auszuwählen, die die Client-App wirklich benötigt (und sonst nichts). Mit diesem Ansatz würden Sie bestimmte Ansichten erstellen und nur ausgewählte Berechtigungen für diese gewähren. Gespeicherte Prozeduren sind ein weiteres Werkzeug hier. Dies kann jedoch wahrscheinlich nicht alle Fälle abdecken und ist ein wenig gefährlich, falls Sie versehentlich zu viel gewährt haben oder ein Fehler in der Datenbank eine Privilegien-Eskalation erlaubt.
Aber wenn Sicherheit ein Anliegen ist, würde ich dreistufig gehen.
Meinen Sie, ich muss eine Datenzugriffsebene schreiben und Zugriffskontrolle auf dieser Ebene hinzufügen?dann jedes Mal, wenn ich Daten auswählen muss, sende ich zuerst meinen Benutzernamen und mein Passwort, nachdem ich autorisiert habe, dann kann ich die Daten bekommen, die ich genehmigt habe? – MemoryLeak
Sie müssen die Verbindungszeichenfolge in web.config verschlüsseln. Hier geht es Encrypt. Verwenden Sie außerdem die Windows-Authentifizierung (vertrauenswürdige Verbindung = true). Dies stellt sicher, dass selbst wenn der Benutzer die Anmeldeinformationen hat, er sich immer noch nicht anmelden kann, ohne dass seine ID zu ActiveDirectory/Domain hinzugefügt wird.
- 1. Ist google-services.json vertraulich?
- 2. Wie kann ich die Stripe-Informationen erhalten?
- 3. Wie behandeln Informationen in der Tabellenansicht, die Nested Header haben?
- 4. Wie kann ich diese Informationen wie die Mapbox bereitstellen?
- 5. Wie kann ich die CPU-Informationen in .net bekommen?
- 6. Wie kann ich Informationen zu Datenträgervolumes abrufen?
- 7. Wie kann ich den Benutzerzugriff auf Servlets & Jsp's behandeln/einschränken?
- 8. Kann ich die Groß-/Kleinschreibung in meinem Pseudonym behandeln?
- 9. Wie kann ich MongoDB behandeln "ł" wie "l", als Synonym?
- 10. Kann ich geworfene Ausnahmen in XAML behandeln?
- 11. Wie kann ich virtuelle Attribute wie reale Attribute behandeln?
- 12. Sollen IP-Adressen und Ports als vertraulich betrachtet werden?
- 13. Ich kann SSH-Verbindungsfehler sowieso nicht behandeln
- 14. Wie kann ich das zurückgegebene JSON-Objekt einfach nur für die Informationen parsen, die ich benötige?
- 15. Wo kann ich asynchrone Ausnahmen behandeln?
- 16. kann ich ein Flowlayoutpanel wie ein Listenfeld behandeln
- 17. Wie kann ich eine Warnung mit GhostDriver über Python behandeln?
- 18. Wie kann ich mehrere aufeinanderfolgende Versuche in Swift 2.0 behandeln
- 19. Wie kann ich effizient mehrere Einfügungen in ein Array behandeln?
- 20. Wie kann ich starke Typen über Redis Hashes behandeln?
- 21. Wie kann ich Javascript in einem Perl Web Crawler behandeln?
- 22. Wie kann ich Ausnahmen in einem Listenverständnis in Python behandeln?
- 23. Wie kann ich Fehler in Global.asax Application_Start behandeln?
- 24. Wie kann ich registrieren und Linux-Neustart-Signal behandeln?
- 25. Wie kann ich Fehler beim Laden eines Iframes behandeln?
- 26. Wie kann ich leere Antwortkörper mit Retrofit 2 behandeln?
- 27. Wie kann ich eine Tastenkombination in jedem WPF-Fenster behandeln?
- 28. Wie kann ich das Löschen dieser Elemente aus SharedPreferences behandeln?
- 29. Wie kann ich mit der JSonobject.getInt-Funktion einen Nullwert behandeln?
- 30. Wie kann ich OnTap-Ereignisse auf pfadbasierten Karten-Overlays behandeln?
So mache ich es auch. – TalentTuner
Während der Initialisierung sagen Sie, dass die Verbindungszeichenfolge entschlüsselt wird. Wird dieser Entschlüsselungsschlüssel auch in der App gespeichert oder wird er zur Laufzeit von Ihnen eingegeben? – Jubal
@jskaggz - Ich kann mir ehrlich gesagt nicht vorstellen, einen Schlüssel oder IV eingeben zu wollen ... Sie würden Fehler machen (zumindest würde ich es tun). Es ist ein Teil der Anwendung selbst, aber es ist verschleiert, falls jemand versucht, die App umzubauen, um es so zu bekommen. Es gibt mehrere Möglichkeiten, dieses Problem zu lösen - meins ermöglicht es mir, aus der Ferne neue Kryptofiles in die App zu übertragen, da die Verschlüsselung auch für die Kommunikation verwendet wird und das Austauschen von Crypto es für alle unmöglich macht, in die Sicherheit einzudringen. – BonanzaDriver