Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Sicherheit ?

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Vorstaedter, 9 September 2016.

  1. Vorstaedter

    Vorstaedter Benutzer

    Hallo alle,
    Ich bastele an einem Informationssystem zu einem speziellen Thema, welches jedermann zur Abfrage wie auch zur Eingabe von weiteren Informationen zur Verfügung stehen soll. Login wird nicht gefordert. Wer neue Informationen eingeben will wird per HTML5-Formular um das Ausfüllen mehrere Felder gebeten, die vom Typ Integer, Float und String sein können, wobei die Strings zwischen 30 und 100 Zeichen lang sind.
    Per Input-Pattern beschränke ich die möglichen Eingaben auf sinnvolle Werte; bei den Strings ist das schwierig, da begrenze ich die eingebbaren Zeichen auf a-z, A-Z, dt. Sonderzeichen, €, Punkt, Komma und Leerzeichen.
    Das ganze geht per POST an ein PHP-Script, wo die Eingaben mit Regulären Ausdrücken gleicher Struktur nochmals überprüft werden und dann in die Datenbank eingetragen werden.
    Da ich mich bislang mit Sicherheitsfragen nur am Rande beschäftigt habe, bitte ich Euch um Hinweise auf zusätzliche Maßnahmen, die ich ggf. treffen sollte, damit nicht jeder Script-Kiddi meine Datenbank sabotieren kann. Ja, ich weiß, absolute Sicherheit geht nicht. Aber größtmögliche Sicherheit bei vertretbarem Aufwand ( Hobbyprogrammierer, Einzelkämpfer) möchte ich schon erreichen.
    Wäre dankbar dafür, wenn Ihr mir das Ende des ein- oder anderen Fadens in die Hand gäbet, an dem ich mich dann weiter hangeln kann.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Mache Dich schlau, was SQL-Injection und prepared Statements sind. Mit dem zweiten kannst Du das erste wirkungsvoll verhindern.
     
  3. Vorstaedter

    Vorstaedter Benutzer

    OK, hab ich gemacht. Das mit den prepared Staements ist gar nicht schwer, wenn man sich erstmal damit beschäftigt hat.
    Ich glaub inzwischen, daß diese Art des Dateizugriffs fast einfacher zu handhaben ist als die Standardmethode mit mysqli_connect und mysqli_close, und das ohne Performance-Nachteile.
    Muß eigentlich die Datenbank nach Einfügen und Ausführen eines prep. Statements noch mit mysqli_close oder irgendwie analog dazu geschlossen werden, oder ist das nicht nötig weil sie ja auch nicht geöffnet wurde ?
    Und noch eine Frage zum Sicherheitsgewinn bei versuchten SQL-Injektions : Worin liegt eigentlich dieser Sicherheitszuwachs ? Es werden doch letztlich die gleichen Daten in die Datenbank geschrieben wie beim Standardverfahren. Was hindert bei prepared Statements den bösartigen Code daran, sei Schadpotential zu entfalten ?
    Ist bestimmt ne Dumme Frage, aber wäre interessant, den Mechanismus zu verstehen.
     
  4. Vorstaedter

    Vorstaedter Benutzer

    Und nochmal generell zu meinem Sicherheitskonzept für das Eingabeformular :
    1. Barriere : Input via HTML5-Eingabeformular wird mit "pattern" so eingeschränkt, daß nur zumindest syntaktisch richtige Eingaben erlaubt sind.
    Programmtypische Zeichen wie z.B. < > ; werden dadurch ausgeschlossen.
    2. Barriere : Das empfangende PHP-Script prüft anhand gleicher Kriterien mittels "preg_match", daß die Bedingungen wie unter 1 gefordert eingehalten sind.
    3. Barriere : abspeichern mittels prepared Statements.

    Haltet Ihr dieses Konzept für zu schwach, gerade richtig oder von Paranoia geprägt ?
    Was würdet Ihr ggf. anders machen ?
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Die Tatsache, daß übergebene Daten als Parameter gewertet werden und nicht die Gefahr besteht, mit Usereingaben SQL-Code zu injizieren.

    xkcd: Exploits of a Mom erklärt das anschaulich.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden