Announcement

Collapse
No announcement yet.

Daten in MySql Datenbank über PHP ändern

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    ok danke schon mal für die erklärung.

    nur mal als Anmerkung und Ergänzung: Man sollte nie - und damit meine ich wirklich nie - Daten aus $_GET, $_POST, $_REQUEST, $_COOKIE, etc. ungeprüft und ungefiltert in einen SQL-String einbauen. Dadurch wird das Script anfällig für SQL-Injection!
    Die Daten sollten mindestens mit mysql_real_escape_string() maskiert werden. Ggfs. kann man auch noch mit strip_tags() alle Tags entfernen, wenn diese nicht explizit gewünscht sind.
    ich bin noch ein Absoluter neuling, was das angeht, der sinn der Sache habe ich verstanden, wie es aber genau funktioniert noch nicht ganz...

    Wenn ich z.Bs Gästebuch eintrag machen über Formulare, wo keine Passwörter usw. übermittelt werden, ist es ja nicht zwingend erforderlich oder???

    Ich Prüfe lediglich, ob alle formulare ausgefühlt sind oder nicht...
    fange nie auf aufzuhören, höre nie auf anzufangen...
    crazykoni.de

    Comment


    • #17
      Originally posted by xxcoolxx View Post
      Wenn ich z.Bs Gästebuch eintrag machen über Formulare, wo keine Passwörter usw. übermittelt werden, ist es ja nicht zwingend erforderlich oder???
      Du solltest das ganze nur für Lernzwecke weglassen. Sobald du das Prinzip einmal verstanden hast und planst, deine Scripte im Internet zu plazieren, solltest du auch an die Sicherheit denken.

      Es ist nie schön, wenn irgendein Spaßvogel dir alle Gästebucheinträge löscht/verpfuscht, nur weil du nicht 5 Min. mehr Zeit investiert hast, die Abfragen sucher zu machen.

      Also, zum lernen - solange deine Scripte deinen lokalen Rechner nicht verlassen - kannst du ohne das ganze auskommen, sobald du alles verstehst, sichere deine Scripte ab.
      "A common mistake that people make
      when trying to design something completely foolproof
      is to underestimate the ingenuity of complete fools.
      "
      >>> Douglas Adams, Mostly Harmless
      -------------------------------------------------------
      Techcrawler.de | JaMT | deCHK | Extra-Bonus-Shopping.de | Scour

      Comment


      • #18
        strip_tags() alle Tags entfernen
        Das heißt dann, im Quelltest, werde üverhaupt keine Tags mehr angezeig oder???

        Ich werde versuchen,
        mysql_real_escape_string()
        das in mein Script einzubauen, muss ich das in der Script reinmachen wo ich die Daten sende oder auch in den Abfrage Script???
        fange nie auf aufzuhören, höre nie auf anzufangen...
        crazykoni.de

        Comment


        • #19
          Hi,

          Das heißt dann, im Quelltest, werde üverhaupt keine Tags mehr angezeig oder???
          korrekt. Lass es aus, falls Du HTML in den Beitraegen erlauben moechtest.

          das in mein Script einzubauen, muss ich das in der Script reinmachen wo ich die Daten sende oder auch in den Abfrage Script???
          In deine Query.
          Weitere Dinge, die mir auffallen:
          1) das komma vor dem WHERE sollte nicht da sein
          2) verwende backticks (`) fuer Tabellen- und Feldnamen, um Fehler zu vermeiden, wenn sie identisch mit MySQL Identifiern sind.
          3) setze auch id in hochkommata. Wenn du das nicht machst, wird die Query scheitern, wenn $_GET['id'] einen nicht-numerischen String beinhaltet.

          Deine Query sieht dann so aus:
          PHP Code:
          $sql "UPDATE `my_links` 
          SET `head` = '"
          .mysql_real_escape_string($head)."', 
          `url` = '"
          .mysql_real_escape_string($url)."', 
          `descript` = '"
          .mysql_real_escape_string($descript)."', 
          `username` = '"
          .mysql_real_escape_string($username)."', 
          `password` = '"
          .mysql_real_escape_string($password)."' 
          WHERE `id`='"
          .mysql_real_escape_string($_GET["id"])."'"
          Gruesse,

          Herbert

          Comment


          • #20
            Originally posted by xxcoolxx View Post
            Das heißt dann, im Quelltest, werde üverhaupt keine Tags mehr angezeig oder???
            Originally posted by Herbert Rotke View Post
            korrekt. Lass es aus, falls Du HTML in den Beitraegen erlauben moechtest.
            Wenn dein Script die Werte aus dem Formular ungefiltert in die Datenbank schreibt und die Einträge aus der Datenbank genauso ungefiltert wieder im Gästebuch ausgegeben werden, dann kann dir jeder Troll z.B.:
            HTML Code:
            <script type="text/javascript">
            window.location.href = 'http://einepornoseite.com';
            </script>
            ins Gästebuch schreiben und jeder Nutzer landet ab sofort beim Aufruf deines Gästebuchs automatisch auf dieser "schönen" Seite - keine gut Werbung
            Wenn du HTML in den Beiträgen erlauben willst, dann solltest du mindestens htmlentities bei der Ausgabe verwenden.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #21
              Hallo nochmal an alle,
              also ich habe jetzt mein Gästebuch skript angepasst ist das so korrekt?
              PHP Code:
              <?php
                 
              /*Variablen zum Einfügen der Daten in die Datenbank*/
                 
              $name           =   $_POST["name"];
                 
              $mail           =   $_POST["mail"];
                 
              $text       =   $_POST["text"];
                 
              $raiting    =   $_POST["raiting"];
                 
              /*Verbindung zu der Datenbank*/
                     
              mysql_connect ("localhost","xxxx","xxxxx") or die ("Keine Verbindung möglich!");
                  
              mysql_select_db ("xxxxxx") or die ("Die Datenbank existiert nicht!");
                 
                 
              /*Script zum Kommunizieren mit der Datenbank*/
                  
              $eintrag  =   "INSERT INTO `g_book` (name, mail, date, text, raiting) VALUES ('$name','$mail', NOW( ), '$text', '$raiting')";
                  
              mysql_real_escape_string($eintrag);
                  
              ?>

                          <form action='<?php echo $_POST['PHP_SELF']; ?>' method='post'>
                              <?php
                                  
              if(!($_POST['ok']))
                                      {
                                          echo 
                                          
              "
                                          <table>
                                              <tr>
                                                  <td class='text-left' colspan='2'>Name & Vorname: *</td>
                                              </tr>
                                              <tr>
                                                  <td><input value='' class='fields' name='name' type='text' colspan='2'></td>
                                              </tr>
                                              <tr>
                                                  <td class='text-left' colspan='2'>Ihre Emailadresse:</td>
                                              </tr>
                                              <tr>
                                                  <td><input value='' class='fields' name='mail' colspan='2'></td>
                                              </tr>
                                              <tr>
                                                  <td class='text-left' colspan='2'>Geben Sie bitte Ihren Kommentar ab: *</td>
                                              </tr>
                                              <tr>
                                                  <td colspan='2'><textarea cols='50' rows='10' name='text' class='area'></textarea></td>
                                              </tr>
                                              <tr>
                                                  <td colspan='2' class='text-left'>
                                                      Hier können Sie unsere Dienstleistungen bewerten *
                                                  </td>
                                              </tr>
                                              <tr>
                                                  <td colspan='2' class='text-left'>
                                                      <img src='../images/content/stars/1.jpg' alt='1 Punkt'> <input type='radio' name='raiting' value='1'>&nbsp;&nbsp;&nbsp;&nbsp;
                                                      <img src='../images/content/stars/2.jpg' alt='2 Punkte'> <input type='radio' name='raiting' value='2'>&nbsp;&nbsp;&nbsp;&nbsp;
                                                      <img src='../images/content/stars/3.jpg' alt='3 Punkte'> <input type='radio' name='raiting' value='3'>&nbsp;&nbsp;&nbsp;&nbsp;
                                                      <img src='../images/content/stars/4.jpg' alt='4 Punkte'> <input type='radio' name='raiting' value='4'>&nbsp;&nbsp;&nbsp;&nbsp;
                                                      <img src='../images/content/stars/5.jpg' alt='5 Punkte'> <input type='radio' name='raiting' value='5'>&nbsp;&nbsp;&nbsp;&nbsp;
                                                  </td>
                                              </tr>
                                              <tr>
                                                  <td align='left' style='padding-left:20px;padding-top:20px;'>
                                                      <input type='submit' value='Senden' name='ok'  style='width:200px;'>
                                                  </td>
                                                  <td align='left' style='padding-left:20px;padding-top:20px;'>
                                                      <input type='reset' value='Felder löschen'  style='width:200px;'>
                                                  </td>
                                              </tr>
                                              <tr>
                                                  <td class='text-left'>
                                                  Alle Felder mit * müssen ausgefühlt werden.
                                                  </td>
                                              </tr>
                                          </table>
                                          "
              ;
                                  }
                              else if(
              $_POST['ok'])
                                  {
                                      if(
              strlen($name) <1$error 1;
                                      if(
              strlen($text)  <1$error 1;
                                      if(
              strlen($raiting)  <1$error 1;
                                      if(
              $error == 0)
                                          {
                                              
              //Variable zum Eintrag der Daten in die Datenbank
                                              
              $eintrag   =   mysql_query($eintrag) or die (mysql_error());
                                              
                                              echo
                                              
              "
                                              <html>
                                              <head>
                                              <meta http-equiv='refresh' content='3; URL='>
                                              </head>
                                              <body>
                                                  <table width='100%' align='center'>
                                                      <tr>
                                                           <td>
                                                               <div style='padding-top:30px;text-align:center;' id='content' class='text-left'>
                                                              <p style='border:solid 1px #FFFFFF;width:500px;height:300px;'>
                                                              <br><br>
                                                              Ihre Daten wurden erfolgreich hochgeladen.
                                                              <br><br><br><br>
                                                              Sie werden automatisch weitergeleitet.
                                                              <br><br>
                                                              Falls die Weiterleitung nicht funktioniert,
                                                              <br><br>
                                                              klicken Sie bitte <a href=''>hier</a>.
                                                              <br><br><br>
                                                              Alle Fragen an den Webmaster hier <a href=''>mailen</a>.
                                                              </p>
                                                              </div>
                                                           </td>
                                                       </tr>
                                                  </table>
                                              </body>
                                              </html>
                                               "
              ;
                                            }
                                          else
                                            {
                                                 echo
                                              
              "
                                              <html>
                                              <head>                                            
                                              <meta http-equiv='refresh' content='3; URL='>
                                              </head>
                                              <body>
                                              <table width='100%' align='center'>
                                                  <tr>
                                                       <td>
                                                           <div style='padding-top:30px;text-align:center;' id='content' class='text-left'>
                                                          <p style='border:solid 1px #FFFFFF;width:500px;height:300px;>
                                                          <br><br>
                                                          Es ist ein Fehler aufgetreten, bitte überprüfen Sie ihre Angaben.
                                                          <br><br><br><br>
                                                          Alle Felder mit * müssen ausgefühlt werden.
                                                          <br><br>
                                                          Falls die Weiterleitung nicht funktioniert,
                                                          <br><br>
                                                          klicken Sie bitte <a href=''>hier</a>.
                                                          <br><br><br>
                                                          Alle Fragen an den Webmaster hier <a href='mailto:'>mailen</a>.
                                                          </p>
                                                          </div>
                                                       </td>
                                                   </tr>
                                              </table>
                                              </body>
                                              </html>
                                              "
              ;
                                            }
                                  }
                              
              ?>
                          </form>
              und wenn ich jetzt in den Formularen kein HTML zulassen möchte, wo muss ich dann strip_tags() setzen, in den Eingabe-Script oder dann in den Ausgabe-Script, im momemt kann ich noch ohne weiteres HTML in den Komentaren verwenden und diese werden dann auch geändert ausgegeben.

              Ich habe schon Probiert den strip_tags() an verschiedenen Stellen einzusetzen, bekomme aber nicht das gewünschte Ergebniss, mal macht es überhaupt nichts, wenn ich das nach dem echo setze, dann ist meine komplette formatierung hin.

              Hier der Ausgabe-Script:
              PHP Code:
              <?php
                  mysql_connect 
              ("localhost","xxxxx","xxxxxx") or die ("Keine Verbindung möglich!");
                  
              mysql_select_db ("xxxxxx") or die ("Die Datenbank existiert nicht!");
              ?>

                              <?php                    
                                  $abfrage      
              "SELECT * FROM g_book ORDER BY date";
                                  
              mysql_real_escape_string($abfrage);
                                   
              $ergebnis     mysql_query($abfrage);
                                   while (
              $row mysql_fetch_object($ergebnis))
                                       {                        
                                           echo
                                      
              "
                                      <table cellspacing='0' cellpadding='0' style='border:1px white solid;margin-top:20px;width:725px;'>
                                      <tr>
                                          <td valign='top'></td>
                                          <td align='right'><span class='g_date_headline'>Datum:&nbsp;&nbsp;<span class='g_date'>
              $row->date</span></span></td>
                                      </tr>
                                      <tr>
                                          <td valign='top' class='g_headline' style='width:150px;'>Name:</td>
                                          <td class='g_text' align='left'>
              $row->name</td>
                                      </tr>
                                      <tr>
                                          <td valign='top' class='g_headline'>Emailadresse:</td>
                                          <td class='g_text' align='left'>
              $row->mail</td>
                                      </tr>
                                      <tr>
                                          <td valign='top' class='g_headline' align='left' colspan='2'>Komentar:</td>
                                      </tr>
                                      <tr>
                                          <td valign='top' class='g_komentar' align='left' colspan='2'>
              $row->text</td>
                                      </tr>
                                      <tr>
                                          <td valign='top'></td>
                                          <td align='right'><span class='g_date_headline'>Bewertung:&nbsp;&nbsp;&nbsp;<span class='g_date'><img src='../images/content/stars/
              {$row->raiting}.jpg' alt='{$row->raiting}'/></span></span>
                                          </td>
                                      </tr>                              
                                      </table>
                                      "
              ;
                                  }
                              
              ?>
              Ist das mit dem mysql_real_escape_string richtig und wo muss ich den strip_tags() setzen, damit überhaupt kein HTML mäglich ist???

              danke schon mal, ich lerne jedes mal dazu.

              Gruß
              konstantin
              fange nie auf aufzuhören, höre nie auf anzufangen...
              crazykoni.de

              Comment


              • #22
                Hallo konstantin,
                Originally posted by xxcoolxx View Post
                ...
                also ich habe jetzt mein Gästebuch skript angepasst ist das so korrekt?
                PHP Code:
                <?php
                   
                /*Variablen zum Einfügen der Daten in die Datenbank*/
                   
                $name           =   $_POST["name"];
                   
                $mail           =   $_POST["mail"];
                   
                $text       =   $_POST["text"];
                   
                $raiting    =   $_POST["raiting"];
                   
                /*Verbindung zu der Datenbank*/
                       
                mysql_connect ("localhost","xxxx","xxxxx") or die ("Keine Verbindung möglich!");
                    
                mysql_select_db ("xxxxxx") or die ("Die Datenbank existiert nicht!");
                   
                   
                /*Script zum Kommunizieren mit der Datenbank*/
                    
                $eintrag  =   "INSERT INTO `g_book` (name, mail, date, text, raiting) VALUES ('$name','$mail', NOW( ), '$text', '$raiting')";
                    
                mysql_real_escape_string($eintrag);
                ...
                Nein!
                Originally posted by xxcoolxx View Post
                ...
                Ist das mit dem mysql_real_escape_string richtig und wo muss ich den strip_tags() setzen, damit überhaupt kein HTML mäglich ist???
                So wie du mysql_real_escape_string() einsetzt ist es Unsinn. strip_tags() kann bei der Eingabe, Ausgabe oder beidem passieren.
                PHP Code:
                <?php
                   
                /*Variablen zum Einfügen der Daten in die Datenbank*/
                   
                $name           =   mysql_real_escape_string(strip_tags($_POST["name"]));
                   
                $mail           =   mysql_real_escape_string(strip_tags($_POST["mail"]));
                   
                $text       =   mysql_real_escape_string(strip_tags($_POST["text"]));
                   
                $raiting    =   is_numeric($_POST["raiting"]) ? int() $_POST["raiting"] : 0;
                ...
                Gruß Falk
                Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                Comment


                • #23
                  Hallo, danke schon mal für die Antwort.

                  PHP Code:
                  $raiting    =   is_numeric($_POST["raiting"]) ? int() $_POST["raiting"] : 0
                  Wenn ich diese Zeile richtig verstehe, werden nur Zahlen akzeptiert. ab dieser Stelle
                  ? int() $_POST["raiting"] : 0;
                  verstehe ich es aber nicht ganz, mit is_numeric prüfe ich, ob meine Variable eine Zahl ist, was passiert dann danach???

                  Wenn ich mein Script so ändere kriege ich folgende Meldung:
                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/web56/html/book/g_book_eintrag.php on line 3

                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /var/www/web56/html/book/g_book_eintrag.php on line 3

                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/web56/html/book/g_book_eintrag.php on line 4

                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /var/www/web56/html/book/g_book_eintrag.php on line 4

                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'www-data'@'localhost' (using password: NO) in /var/www/web56/html/book/g_book_eintrag.php on line 5

                  Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /var/www/web56/html/book/g_book_eintrag.php on line 5
                  Gruß
                  Zuletzt editiert von xxcoolxx; 15.09.2008, 13:43.
                  fange nie auf aufzuhören, höre nie auf anzufangen...
                  crazykoni.de

                  Comment


                  • #24
                    Originally posted by xxcoolxx View Post
                    PHP]$raiting = is_numeric($_POST["raiting"]) ? (int) $_POST["raiting"] : 0;[/PHP]

                    Wenn ich diese Zeile richtig verstehe, werden nur Zahlen akzeptiert. ab dieser Stelle verstehe ich es aber nicht ganz, mit is_numeric prüfe ich, ob meine Variable eine Zahl ist, was passiert dann danach???
                    Diese Schreibweise ist gleichzusetzen mit:
                    PHP Code:
                    if (is_numeric($_POST["raiting"])) 
                      
                    $raiting =  (int) $_POST["raiting"]
                    else
                      
                    $raiting 0
                    Das (int) $_POST["raiting"] macht dabei eine explizite Typkonvertierung in einen Integer. (Sorry wg. der falschen Schreibweise int()).

                    mysql_real_escape_string() solltest du erst nach der "Initialisierung" der DB einsetzen. (Hab ich übersehen). Richtiger wäre also:
                    PHP Code:
                    <?php
                      
                    /*Verbindung zu der Datenbank*/
                       
                    mysql_connect ("localhost","xxxx","xxxxx") or die ("Keine Verbindung möglich!");
                        
                    mysql_select_db ("xxxxxx") or die ("Die Datenbank existiert nicht!"); 

                       
                    /*Variablen zum Einfügen der Daten in die Datenbank*/
                       
                    $name           =   mysql_real_escape_string(strip_tags($_POST["name"]));
                       
                    $mail           =   mysql_real_escape_string(strip_tags($_POST["mail"]));
                       
                    $text       =   mysql_real_escape_string(strip_tags($_POST["text"]));
                       
                    $raiting    =   is_numeric($_POST["raiting"]) ? int() $_POST["raiting"] : 0
                    ...
                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X