Pufferüberläufe scheinen eine der größten Ursachen für Sicherheitslücken zu sein. Ich programmiere selten in C/C++ (nur für bestimmte Kursarbeit), so dass ich etwas vermisse, aber ich verstehe nicht, warum Leute weiterhin Datenstrukturen verwenden, die Überläufe erlauben. Warum werfen nicht alle Datenstrukturen eine Ausnahme, wenn sie voll sind? Scheint so, als würde diese einfache Lösung die Sicherheit der Software erheblich verbessern.Warum verwenden Benutzer weiterhin Datenstrukturen, die Überläufe zulassen?
Antwort
- Ignorance
Ein großer Prozentsatz des Programmierers (in meiner vielleicht zu Unrecht negativ versetzten Sicht der Welt) entweder nicht verstehen, Sicherheitsbedenken überhaupt nicht oder nicht verstehen, welche Datenstrukturen, die sie verwenden sind verwundbar. Eine ganze Tonne von Programmierern ging durch die 90er Jahre, wo jeder gets()
verwendete und sogar jedes C-Buch da draußen ermutigte es. Jetzt würden Sie verrückt genannt werden, um es zu benutzen. Aber nicht jeder hat das Memo erhalten!
- Laziness
Unterkategorien umfassen „wird niemand stören meine App angreifen“, „es ist nur ein Prototyp sowieso“, und „es nächste Woche fällig ist, werde ich es beheben später“
- Schwierigkeit (wahrgenommen oder auf andere Weise)
Es ist eigentlich wirklich schwer tragbar, korrekt und sicher C-Code zu schreiben. Fast jedes nichttriviale Projekt, das nicht mit einem scharfen Auge geschrieben wurde, hat wahrscheinlich Bugs, wenn nicht sogar offensichtliche Schwachstellen. Und in einer nicht verwalteten Sprache wie C können viele Bugs Sicherheitsprobleme verursachen.
Es ist auch schwierig, APIs zu erstellen, die sowohl "benutzbar" als auch "sicher" sind.
Und für das letzte Messer in der Leiche, betreffen alle diese Probleme alle Entwickler im gesamten Projekt. Dazu gehören alle Bibliotheken, die Sie verwenden, alle Bibliotheken sie verwenden, bis hin zu und einschließlich des Betriebssystemkernels, den Sie verwenden. Jeder Programmierer, der auf dem Weg in irgendeine Sicherheitsfalle gerät, kompromittiert das Ganze ziemlich.
Viele dieser Probleme werden mit verwalteten Sprachen besser - zumindest können Sie nicht über willkürlichen Speicher scribbeln, aber es gibt immer noch verschiedene Klassen von Sicherheitsproblemen.
- 1. Benutzer-einstellbare Datenstrukturen
- 2. über iOS Popup-Benutzer die App weiterhin fragen, so dass Lage im Hintergrund verwenden
- 3. Überläufe in size_t Ergänzungen
- 4. Datenstrukturen - wann welche verwenden?
- 5. Warum dieser Fehler weiterhin auftritt?
- 6. Warum verwendet der Linux-Kernel die Datenstrukturen, die er ausführt?
- 7. Warum treten Byte-Überläufe auf und was erreichen sie?
- 8. Nicht zulassen, dass Benutzer Quiz zweimal nehmen
- 9. Dynamisch erstellt Element Breite Überläufe
- 10. Benutzer Bild, um die Größe in WPF Zulassen
- 11. Überläufe und Unterläufe in C Sprache
- 12. iOS: Warum erhält die ausgeblendete Schaltfläche weiterhin Tippereignisse?
- 13. Warum verwenden Benutzer die Befehlszeile anstelle von IDE?
- 14. Warum wird mein ASP.NET-Cache weiterhin gelöscht?
- 15. Warum weiterhin java.io.FileNotFoundException empfangen: (Zugriff verweigert) Fehler?
- 16. Animation, die Probleme weiterhin bestehen
- 17. Sicherheit, die Benutzer Wildcards verwenden
- 18. Warum verbergen C++ - Datenstrukturen für Graphen zusammenhängende ganzzahlige Indizes?
- 19. Sprachen, die benannte Tupel zulassen
- 20. Warum würde C# einen ungültigen Aufzählungswert zulassen?
- 21. Zeitkomplexität von Datenstrukturen
- 22. UIActivityViewController-Vervollständigungshandler ruft weiterhin Aktion auf, wenn Benutzer Abbrechen drückt
- 23. Suchmethoden Datenstrukturen
- 24. Datenstrukturen Frage
- 25. Delphi Datenstrukturen
- 26. Wird die Legacy-Firebase-API weiterhin unterstützt?
- 27. Wird die Legacy-Kriterien-API weiterhin empfohlen?
- 28. Was sind selbstregelnde Datenstrukturen?
- 29. Wie kann ich leere Felder in meinem ModelForm zulassen, während weiterhin unique = True verwendet wird?
- 30. Eklipse weiterhin
Ignoranz ist # 1. Sicherheit und Best Practices werden weder gelehrt noch hervorgehoben. Und wie bereits bei gets() erwähnt, können sich "Best-Practices" im Laufe der Zeit ändern. – LaJmOn