Frage

Ist es sinnvoll, die Datenvalidierung vollständig an die Einschränkungen der Datenbank-Engine zu delegieren?

Die Validierung von Daten aus der Anwendung verhindert nicht das ungültige Einfügen aus einer anderen Software (möglicherweise in einer anderen Sprache von einem anderen Team geschrieben).Mithilfe von Datenbankeinschränkungen reduzieren Sie die Punkte, an denen Sie sich über ungültige Eingabedaten Sorgen machen müssen.

Wenn Sie die Validierung sowohl in der Datenbank als auch in der Anwendung durchführen, wird die Wartung langweilig, da Sie den Code für wer weiß wie viele Anwendungen aktualisieren müssen, was die Wahrscheinlichkeit menschlicher Fehler erhöht.

Ich glaube einfach nicht, dass dies sehr oft getan wird, wenn ich mir den Code von Projekten für freie Software ansehe.

War es hilfreich?

Lösung

Am besten, wenn möglich, Ihre Validierungsregeln in der Datenbank angegeben haben und verwenden oder einen Rahmen schreiben, die diese Regeln sprudeln in Ihrem Frontend macht. ASP.NET Dynamic Data hilft dabei und es gibt einige kommerzielle Bibliotheken gibt, die machen es noch einfacher.

Dies kann sowohl für einfache Eingabevalidierung (wie Zahlen oder Daten) und die zugehörigen Daten, wie sie von Fremdschlüssel eingeschränkt erfolgen.

Zusammenfassend ist die Idee ist es, die Regeln in einem Ort (die Datenbank der meisten der Zeit) und Code in anderen Schichten zu definieren, die diese Regeln erzwingen werden.

Andere Tipps

am Eingang Zeit bestätigen. Bestätigen Sie wieder, bevor Sie sie in die Datenbank aufgenommen. Und haben Datenbankbeschränkungen schlecht Eingang zu verhindern. Und Sie trotz allem, dass wetten können, werden schlechte Daten immer noch in Ihre Datenbank erhalten, so bestätigen es wieder, wenn Sie es verwenden.

Es scheint, wie jeden Tag einige Web-App gehackt wird, weil sie ihre Validierung alle in der Form haben oder noch schlimmer, mit Javascript, und die Menschen einen Weg gefunden, es zu umgehen. Du musst dagegen schützen.

Paranoid? Mich? Nein, gerade erlebt.

Der Nachteil die Logik in die Datenbank zu verlassen, ist dann die Last auf dem jeweiligen Server zu erhöhen. Web- und Anwendungsserver sind vergleichsweise leicht nach außen zu skalieren, sondern eine Datenbank erfordert spezielle Techniken. Als allgemeine Regel gilt, dann ist es eine gute Idee, so viel von der Rechenlogik in die Anwendungsschicht zu setzen und die Interaktion mit der Datenbank so einfach wie möglich zu halten.

Mit diesem wird gesagt, ist es möglich, dass Ihre Anwendung muss möglicherweise nicht über eine solche schwere Skalierbarkeitsprobleme kümmern. Wenn Sie sicher , dass Datenbankserverlast wird kein Problem für die absehbare Zukunft, dann gehen Sie vor und die Einschränkungen für die Datenbank aufgenommen. Sie sind ganz richtig, dass dies die Organisation und die Einfachheit des Systems als Ganzes Validierungslogik verbessert sich in zentraler Lage von zu halten.

Es gibt noch andere Sorgen als nur SQL-Injection mit Eingabe. Sie sollen die meisten defensive Haltung möglich nehmen, wenn Benutzereingaben zu akzeptieren. Zum Beispiel könnte ein Benutzer in der Lage sein, einen Link zu einem Bild in ein Textfeld einzugeben, das ist eigentlich ein PHP-Skript, das etwas Gemeines läuft.

Wenn Sie Ihre Anwendung entwerfen gut, sollten Sie nicht mühsam alle Eingaben überprüfen müssen. Zum Beispiel könnten Sie eine Forms API verwenden, die Pflege für Sie den größten Teil der Arbeit übernimmt, und eine Datenbankschicht, die viel das gleiche.

Dies ist eine gute Ressource für grundlegende Überprüfung von Schwachstellen:

http://ha.ckers.org/xss.html

Es ist viel zu spät von der Zeit, die Daten zu Ihrer Datenbank erhalten aussagekräftige Validierung für die Benutzer und Anwendungen bereitzustellen. Sie wollen nicht Ihre Datenbank zu tun alle die Validierung, da diese Dinge verlangsamen werde ziemlich gut, und die Datenbank nicht die Logik als deutlich zum Ausdruck bringen. In ähnlicher Weise, wie Sie wachsen Sie werden mehr Anwendungsebene Transaktionen werden das Schreiben der Datenbank-Transaktionen zu ergänzen.

Ich würde sagen, es ist möglicherweise eine schlechte Praxis, je nachdem, was passiert, wenn die Abfrage fehlschlägt. Zum Beispiel, wenn Sie Ihre Datenbank einen Fehler aus, könnte die von einer Anwendung auf intelligente Weise behandelt wurde, dann könnten Sie in Ordnung sein.

Auf der anderen Seite, wenn Sie keine Validierung in Ihrer Anwendung setzen Sie, könnten Sie keine schlechten Daten haben, aber Sie können Benutzer denken, sie Sachen eingegeben, die nicht gespeichert bekommen.

Implementieren so viel Datenvalidierung, wie Sie in der Datenbank, ohne dabei andere Ziele enden kann. Zum Beispiel, wenn Geschwindigkeit ein Problem ist, können Sie zu prüfen, nicht mit Fremdschlüssel usw. Darüber hinaus können einige Datenvalidierung nur auf der Anwendungsseite durchgeführt werden, zum Beispiel, um sicherzustellen, dass E-Mail-Adressen gültig Domains.

Ein weiterer Nachteil Datenvalidierung aus der Datenbank zu tun, ist oft, dass Sie die gleiche Art und Weise in jedem Fall bestätigen nicht. In der Tat hängt es oft auf die Anwendungslogik (Benutzerrollen), und manchmal möchten Sie vielleicht Validierung umgehen insgesamt (Cron-Jobs und Wartungsskripte).

Ich habe festgestellt, dass die Validierung in der Anwendung und nicht in der Datenbank gut funktioniert.Dann muss natürlich die gesamte Interaktion über Ihre Bewerbung erfolgen.Wenn Sie andere Anwendungen haben, die mit Ihren Daten arbeiten, muss Ihre Anwendung eine Art API (hoffentlich REST) ​​unterstützen.

Ich glaube nicht, dass es eine richtige Antwort ist, hängt es von Ihrer Verwendung.

Wenn Sie vorhaben, ein sehr stark ausgelastetes System haben, mit dem Potential, dass die Datenbank-Performance zu einem Engpass werden könnte, dann könnten Sie die Verantwortung für die Validierung an das Front-End bewegen wollen, wo es einfacher, mit mehreren maßstäblich Server.

Wenn Sie mit der Datenbank mehr Anwendungen interagieren, dann mögen Sie vielleicht nicht die Validierungsregeln für mehrere Anwendungen zu replizieren und zu pflegen, so ist, dann könnte die Datenbank der bessere Ort sein.

Sie können ein schlankeres Eingabebildschirm wollen, das nicht nur den Benutzer mit Validierungs-Warnungen treffen, wenn sie versuchen, einen Datensatz zu speichern, vielleicht möchten Sie ein Feld validieren, nachdem Daten eingegeben wurden und es Verluste konzentrieren; oder sogar während der Benutzer tippt, Ändern der Schriftfarbe als die Validierung fehlschlägt / gibt.

Auch zu Einschränkungen im Zusammenhang, sind Warnungen verdächtiger Daten. In meiner Anwendung habe ich hart Einschränkungen in der Datenbank (zB jemand kann nicht einen Job, bevor ihr Geburtsdatum beginnen), dann aber in dem Front-End hat Warnungen für Daten, die möglicherweise korrekt sind, aber vermutet (zB ein acht Jahre -old einen Job starten).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top