Ankündigung

Einklappen
Keine Ankündigung bisher.

Sicherheit bei Formularen und Datenbanken

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sicherheit bei Formularen und Datenbanken

    Hallo alle zusammen,

    ich bin wieder dabei eine neue Seite für meine Firma zu schreiben.
    Dabei muss man sich mit Benutzername und Passwort einloggen.
    Soweit auch alles schön und gut. Nun mache ich mir Gedanken zum Thema Sicherheit.

    Ich hatte vor einem oder zwei Jahren mal was über MySql Injection gelesen.
    Damit der Angreifer es nicht ganz so einfach hat, sollte man ( wenn ich es richtig verstanden habe ) alle Daten die über ein Formular übergeben werden mit mysql_real_escape_string "schützen"

    Ich habe es so versucht :

    PHP-Code:
    $benutzer mysql_real_escape_string($_POST["benutzer"]) 
    Wenn ich nun $benutzer mit echo ausgeben möchte, ist die Variable leer ....

    Laut meinem Provider nutze ich php 5.3.
    Was mache ich falsch und wie verhindere ich eine MySql Injection ???

    Gruß

    Roland


  • #2
    http://php-de.github.io/jumpto/sql-injection/
    auch wichtig: http://php-de.github.io/jumpto/kontextwechsel/
    bzw. generell alle Artikel unter: http://php-de.github.io/#security

    Noch ein Post zu Kontextwechsel
    http://www.php.de/php-einsteiger/113...tml#post832379

    mysql_real_escape_string() gehört übrigens zur alten mysql-Extension:
    Die mysql_* Erweiterung ist veraltet
    Durch einen Wechsel auf mysqli_* oder PDO greifst du auf die modernere API zu und hast die Möglichkeiten Prepared Statements zu benutzen die gegen Injections schützen.
    Ich persönlich bevorzuge PDO, schönes Tutorial: http://www.peterkropff.de/site/php/pdo.htm
    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Zitat von Arco2726 Beitrag anzeigen
      PHP-Code:
      $benutzer mysql_real_escape_string($_POST["benutzer"]) 
      Wenn ich nun $benutzer mit echo ausgeben möchte, ist die Variable leer ....
      Dann war wohl schon die POST Variable leer.

      Ganz simpler Test (Datenbankverbindung muss bestehen):
      PHP-Code:
      $benutzer mysql_real_escape_string("Scarlet O'Hara");
      var_dump($benutzer); 
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Zitat von lstegelitz Beitrag anzeigen
        Datenbankverbindung muss bestehen
        Wird wohl daran liegen, dass keine besteht. Dann dürfte mysql_real_escape_string bool(false) liefern, was bei Ausgabe zum leeren String wird.

        Solche Fehler sind vermeidbar, wenn das Error-Reporting passend eingestellt ist. Siehe etwa:

        - http://phpforum.de/forum/showthread.php?t=216988
        - http://php-de.github.io/#debugging

        Ansonsten wurde wohl alles gesagt.

        Insgesamt sind die aktuellen Threads von HeinrichK sicher ganz interessant.

        - http://www.php.de/search.php?do=find...&starteronly=1

        Kommentar


        • #5
          Zitat von lstegelitz Beitrag anzeigen
          Dann war wohl schon die POST Variable leer.

          Ganz simpler Test (Datenbankverbindung muss bestehen):
          PHP-Code:
          $benutzer mysql_real_escape_string("Scarlet O'Hara");
          var_dump($benutzer); 
          Hallo lstegelitz.

          Die Variable war nicht leer. Wenn ich das ohne "mysql_real_escape_string" mache zeigt er mir die Variable an.

          Aber egal, ich werde mir eure Links genau ansehen. Vielen dank dafür an alle.

          Gruß

          Roland

          Kommentar


          • #6
            Es. Besteht. Keine. Datenbank. Verbindung.

            Das kannst du aber wie gesagt simpel durch Debugging ermitteln.

            Kommentar


            • #7
              Verusch es mit sprintf

              PHP-Code:
              <?php
              require_once 'dbVerbindung.php'

              $username $_POST['username']

              $sql sprintf("SELECT * FROM userdata WHERE username ='%s'",
                        
              mysql_real_escape_string("$username");

               <?

              beste Grüße

              Kommentar


              • #8
                Etwas mehr Konzentration bitte…

                Kommentar

                Lädt...
                X