Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP funktion gegen SQL-Injection

Einklappen

Neue Werbung 2019

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

  • #16
    naja entweder mit den was du meintest oder meine erste...sind doch 2 varianten in meinen augen....

    Kommentar


    • #17
      Na meine Meinung ist eben: verwende prepared statements. Trifft auf Variante 1 nicht zu, bleibt also nur noch eine übrig

      Kommentar


      • #18
        Zitat von David Beitrag anzeigen
        Na meine Meinung ist eben: verwende prepared statements. Trifft auf Variante 1 nicht zu, bleibt also nur noch eine übrig

        also jetzt bin ich wieder ganz verwirrt


        also entweder meine variante ODER prepared statements.

        oder wie jetzt ?

        Kommentar


        • #19
          Deine Variante ist ohne prepared statements. Wenn Du mich nach meiner Meinung fragst, sage ich: "Nimm eine Variante mit prepared statements". Was ist daran nicht zu verstehen?

          Kommentar


          • #20
            Zitat von David Beitrag anzeigen
            Deine Variante ist ohne prepared statements. Wenn Du mich nach meiner Meinung fragst, sage ich: "Nimm eine Variante mit prepared statements". Was ist daran nicht zu verstehen?
            naja da müsst ich alles umschreiben...aber für mehr sicherheit lohnt es sich doch

            Kommentar


            • #21
              Soviel an Arbeit ist das auch mal wieder nicht.
              Schau dir mal PDO (PHP Data Objects) oder MySQLi an.

              Kommentar


              • #22
                PHP-Code:
                $stmt $pdo->prepare('INSERT INTO tbl (x,y,z) VALUES(?,?,?)');
                $stmt->execute( array($_POST['x'], $_POST['y'], $_POST['z']) ); 
                Das reizt zwar nicht die Möglichkeiten aus, aber ich finde diese "Grundform" sogar einfacher als die vergleichbaren mysql_query()/real_escape_string Versionen.

                Kommentar


                • #23
                  Zitat von David Beitrag anzeigen
                  PHP-Code:
                  $stmt $pdo->prepare('INSERT INTO tbl (x,y,z) VALUES(?,?,?)');
                  $stmt->execute( array($_POST['x'], $_POST['y'], $_POST['z']) ); 
                  Das reizt zwar nicht die Möglichkeiten aus, aber ich finde diese "Grundform" sogar einfacher als die vergleichbaren mysql_query()/real_escape_string Versionen.
                  mh stimmt schon irgendwie...aber mal sehen hab mich noch net ganz entschieden. aber ist echt ne überlegung wert

                  Kommentar


                  • #24
                    werd wohl vorerst doch bei der ersten variante bleiben..

                    also das hab ich jetzt mal fix gemacht nur mit einen formularfeld.

                    PHP-Code:
                    <?php

                    function sql_protect($eingabe
                    {
                     
                    //Überflüssige Maskierungen aus der übergebenen Variablen entfernen
                     
                    if(get_magic_quotes_gpc()) 
                     {
                      
                    $eingabe stripslashes($_POST['name']);
                      
                    $eingabe str_replace('%''\%'$eingabe);
                      
                    $eingabe str_replace('_''\_'$eingabe);
                     } 
                      else 
                     {
                      
                    $eingabe $_POST['name'];
                     }
                      return 
                    $eingabe;
                    }  



                    if(isset(
                    $_POST['Abschicken']))
                    {
                    $sql "SELECT vname FROM namen WHERE vname = '".mysql_real_escape_string(sql_protect($eingabe),$con)."'";
                    $erg mysql_query($sql);

                     if(!
                    $erg)
                       {
                        exit(
                    mysql_error());
                        } 
                       else 
                        {
                         
                    $ergebniss sql_protect($eingabe);
                         
                    $test mysql_fetch_object($erg);
                         
                         echo 
                    "Ihre Eingabe: $ergebniss<br>";
                         echo 
                    "Datenbankergebniss: $test->airpCode <br>";
                        }   
                    }

                    ?>
                    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
                    Name <input name="name" type="text">
                    <input name="Abschicken" type="submit" value="eintrag">
                    </form>
                    ich denke mal bei der funktion sql_protect fehlt was, oder es ist einfach nur müll

                    das mit den str_replace hab ich dewegen gemacht
                    Hinweis: mysql_real_escape_string() maskiert weder % noch _. Diese Zeichen werden in MySQL als Platzhalter interpretiert, wenn sie mit LIKE, GRANT oder REVOKE kombiniert werden.

                    Kommentar


                    • #25
                      PHP-Code:
                      function sql_protect($eingabe
                      {
                       
                      //Überflüssige Maskierungen aus der übergebenen Variablen entfernen
                       
                      if(get_magic_quotes_gpc()) 
                       {
                        
                      $eingabe stripslashes($_POST['name']);
                        
                      $eingabe str_replace('%''\%'$eingabe);
                        
                      $eingabe str_replace('_''\_'$eingabe);
                       } 
                        else 
                       {
                        
                      $eingabe $_POST['name'];
                       }
                        return 
                      $eingabe;

                      oder es ist einfach nur müll
                      Ja, genau das.
                      - Sie hat einen Parameter, benutzt aber einen POST Wert
                      - Sie benutzt 'name' als festen Schlüssel (welchen Mehrwert hat da noch die Funktion)
                      - Sie "escaped" % und _ mit \, was totaler Humbug ist. Handbuch lesen!
                      - Sie führt bestimmte Funktionen nur abhängig von get_magic_quotes_gpc() aus, aber nicht nur welche, die magic quotes betreffen!
                      - Sie heißt sql_protect und hat überhaupt nix mir sql zu tun
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar


                      • #26
                        ok dann amch ich es mal schritt weise, fals es ok ist

                        PHP-Code:
                        $eingabe $_POST["name"];

                        function 
                        sql_protect($eingabe
                        {
                         
                        //Überflüssige Maskierungen aus der übergebenen Variablen entfernen
                         
                        if(get_magic_quotes_gpc()) 
                         {
                          
                        $eingabe stripslashes($eingabe);
                         } 
                          return 
                        $eingabe;

                        wäre es soweit erstmal richtig...? oder ist "name" wieder falsch?

                        Kommentar


                        • #27
                          Bevor Du jetzt weitermachst: Was genau willst Du sparen mit dieser Funktion?
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #28
                            wie meinste sparen?

                            ich würd gern ne funktion schrieben die injection verhindert, egal ob über die url oder formulare..

                            ich habe ja gegoogelt und versucht das anzuwenden was ich gefunden habe, aber anscheind wende ich es nur nicht richtig an, sehe ich auch ein deswegen suche ich ja auch hier hilfe..

                            Kommentar


                            • #29
                              ich würd gern ne funktion schrieben die injection verhindert
                              Das tut die Funktion nun aber überhaupt nicht mehr. In der ersten Version war wenigstens noch mysql_real-escape_string() vorhanden. Mittlerweile ist da grnichts mehr drin, was auch nur ansatzweise vor sql injectgions schützt. Im Gegenteil machst Du auch noch den (wenn auch falschen) Ansatz von magic_quotes rückgängig, der mal genau wegen der Myriaden an ungeschützten PHP Skripten eingeführt wurde.

                              Kommentar


                              • #30
                                ich würd gern ne funktion schrieben die injection verhindert
                                Es gibt aber schon eine. Und die heißt mysql_real_escape_string. Ob Du jetzt die aufrufst oder Deine eigene ist total Hupe. strip_slashes hat nichts mit SQL Sicherheit zu tun, sondern mit Parameterescaping. Das ist genauso für reine Ausgaben notwendig. Damit wird strip_slashes redundant, wenn Du es in die Funktion einbaust.
                                % zu \% pauschal anzuwenden ist falsch. Nicht alle Werte gehen in LIKE Statements ein und so schreibst Du fehlerhafte Eingaben in Deine Datenbank.
                                [COLOR="#F5F5FF"]--[/COLOR]
                                [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                                [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                                [COLOR="#F5F5FF"]
                                --[/COLOR]

                                Kommentar

                                Lädt...
                                X