Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu Mysql Datenbank Abfrage

Einklappen

Neue Werbung 2019

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

  • Frage zu Mysql Datenbank Abfrage

    Hallöchen Leute,
    Ich hätte eine Frage zu der php Funktion
    mysql_real_escape_string

    Diese Funktion sollte ja eigentlich bei Datenbankabfragen genutzt werden um entsprechende Abfragen sicher zu machen..

    Ich habe folgenden Code Abschnitt:

    PHP-Code:
    $mysql_query_string "SELECT * FROM `flughaefen` WHERE icao = '$DepatureAirport'";
    $mysql_query mysql_query($mysql_query_string);
    $mysql_num_rows mysql_num_rows$mysql_query ); 
    Ich habe dann den obigen Abschnitt auf mysql_real_escape_string erweitert:

    PHP-Code:
    $mysql_query_string "SELECT * FROM `flughaefen` WHERE icao = ".mysql_real_escape_string($DepatureAirport)."";
    $mysql_query mysql_query($mysql_query_string);
     
    $mysql_num_rows mysql_num_rows$mysql_query ); 
    Dabei kam diese Fehlermeldung..

    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Entfernungsberechnung\include\func tion.inc.php on line 58

    Ich konnte mit dieser Fehlermeldung nichts anfangen also habe ich getrickst, dieses sql Anweisung soll Daten prüfen die vom Benutzer über ein POST Formular eingeben werden und von einem PHP Programm überprüft werden.
    Die betreffenden Variablen sehen so aus..

    PHP-Code:
    $DepatureAirport $_POST['DEP']; 
    $ArrivalAirport     $_POST['ARR']; 
    Da ich also Angst habe dass evtl Cross Site Scripting oder eine SQL Injection angewandt wird habe ich erstmal mit htmlspecialchars gearbeitet, was aber meines Wissens nach nicht ausreichend genug ist...
    Wenn ich jetzt den Code so abändere:

    PHP-Code:
    $DepatureAirport mysql_real_escape_string($_POST['DEP']); 
    $ArrivalAirport     mysql_real_escape_string($_POST['ARR']); 
    Müsste es doch die selbe Wirklich haben, wie wenn ich es direkt in der SQL abfrage mache, oder?

    Denn jetzt bekomme ich nicht mehr die obige Fehlermeldung...

    Vlt bin ich einfach nur dämlich oder unwissend aber ich bin in Sachen Sicherheit nicht wirklich gut, also seht es mir bitte nach..
    Grüße

    Vincent


  • #2
    Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Entfernungsberechnung\include\func tion.inc.php on line 58
    mysql_query hat keine Ressource, sondern false zurück gegeben. Dein SQL ist also Fehlerhaft.

    Jetzt könntest du entweder mysql_error nutzen um dir die Fehlermeldung ausgeben zu lassen oder du schaust dir dein SQL an und findest direkt den Fehler.

    Code:
    icao = '$DepatureAirport'
    hast du zu
    Code:
    icao = ".mysql_real_escape_string($DepatureAirport).""
    gemacht. Es sollte auffallen, dass du in 1 einen String an die DB übergibst in Single-Quotes, im zweiten fehlen diese. Variante zwei geht nur, wenn du Zahlen übergibst.
    War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

    Kommentar


    • #3
      Hi,

      warum nicht gleich mit z.B. PDO?!

      PHP-Code:
      <?php
      $host 
      "";
      $user "";
      $pass "";
      $database "";

          try 
          { 
           
      $db = new PDO("mysql:host=$host;dbname=$database"$user$pass);
           
      $db->exec("SET CHARACTER SET utf8");     
           
      $db->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);     
           
           
      $dbFlughafen $db->prepare("SELECT * FROM flughaefen WHERE icao = ?");
           
      $dbFlughafen->execute(array($DepatureAirport));
           
           echo 
      $dbFlughafen->rowCount();
           
      // usw.
          

          catch (
      PDOException $e
          {     
           echo 
      "Error: ".htmlspecialchars($e->getMessage());
          }
      ?>
      mfg wolf29
      while (!asleep()) sheep++;

      Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

      Kommentar


      • #4
        Zitat von Dreamwatcher Beitrag anzeigen
        Variante zwei geht nur, wenn du Zahlen übergibst.
        weil das missverständlich sein könnte noch ne ergänzung.

        wenn ich glaube zahlen zu übergeben, dann ist das hier auch nicht richtig
        PHP-Code:
        icao ".mysql_real_escape_string($zahl_aus_POST)."" 
        dann lieber
        PHP-Code:
        icao ". (int) $zahl_aus_POST."" 
        was du natürlich meintest ist, dass man die stringbegrenzer in einem query weggelassen kann bei zahlen

        PHP-Code:
        " select foo from bar where spalte = 3 " //geht
        " select foo from bar where spalte = '3' " //geht
        " select foo from bar where spalte = ich bin ein string " //geht nicht 
        " select foo from bar where spalte = 'ich bin ein string' " //geht 
        liebe Grüße
        Fräulein Dingsda

        Kommentar


        • #5
          Grundlegend schon mal mysqli_* nutzen.

          Dann sehe das Escapen auch etwa so aus:

          PHP-Code:

          $wert 
          mysqli_real_escape_string($link$_POST["wert"]); 
          Das mit $link zählt dann auch bei mysqli_query. $link setzt sich aus Host, User und PW zusammen also:

          PHP-Code:

          $link 
          mysqli_connect($host$user$pass); 
          - Laravel

          Kommentar


          • #6
            Grundlegend schon mal mysqli_* nutzen.
            und warum nicht PDO?

            mfg wolf29
            while (!asleep()) sheep++;

            Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

            Kommentar


            • #7
              Zitat von dingsda Beitrag anzeigen
              was du natürlich meintest ist, dass man die stringbegrenzer in einem query weggelassen kann bei zahlen
              Ja richtig, danke für die Ergänzung, das hätte falsch aufgefasst werden können.
              Zitat von wolf29 Beitrag anzeigen
              und warum nicht PDO?
              Ob PDO_ oder mysqli_, Fakt ist erstmal, dass mysql_ veraltet ist.

              Gruß
              Dreamwatcher
              War der Beitrag hilfreich? Dann Bedank dich mit einem klick auf .

              Kommentar


              • #8
                Hallöchen,

                Zitat von php-for Beitrag anzeigen
                Ich konnte mit dieser Fehlermeldung nichts anfangen..
                Was ein klares Indiz dafür ist, dass du dich in deiner Selbsteinschätzung ein wenig überschätzt hast. Fortgeschritten ist das jedenfalls nicht.

                Zitat von php-for Beitrag anzeigen
                Da ich also Angst habe dass evtl Cross Site Scripting oder eine SQL Injection angewandt wird habe ich erstmal mit htmlspecialchars gearbeitet, was aber meines Wissens nach nicht ausreichend genug ist...
                Du solltest dir unbedingt klar machen, wie diese Sicherheitslücken funktionieren und wann man welche Mittel verwendet, um sich vor ihnen zu schützen. htmlspecialchars benötigst du bspw. nur bei der Ausgabe von Benutzereingaben.

                Viele Grüße,
                lotti

                Kommentar


                • #9
                  bei htmlspecialchars und escaping fällt mir immer wieder meine eigene blödheit vor 5 monaten ein
                  wie real_escape_string und htmlspecialchars richtig anwenden
                  liebe Grüße
                  Fräulein Dingsda

                  Kommentar


                  • #10
                    Zitat von wolf29 Beitrag anzeigen
                    und warum nicht PDO?

                    mfg wolf29
                    Klar PDO geht auch, nur es ist einfacher ein i an mysql anzuhängen :P Nächstes mal dann auch wieder mit dem Hinweis auf PDO
                    - Laravel

                    Kommentar

                    Lädt...
                    X