WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   PHP / MySQL (http://www.wcm.at/forum/showthread.php?t=205361)

delphirocks 11.12.2006 23:05

Sicherer wäre z.B., die neue mysqli Erweiterung zu verwenden.

Also anstatt
PHP-Code:

$select_inhalt "SELECT Inhalt, Autor, Datum, Titel FROM news WHERE id = ".$upid

lieber
PHP-Code:

$query $mysqli->prepare"SELECT Inhalt, Autor, Datum, Titel FROM news WHERE id = ?" );
$query->bind_param'i',  $upid ); // i für integer
$query->execute( ); 

Ist zwar lästig, dafür ist man auf der sicheren Seite. Es gibt auch noch ein paar andere Möglichkeiten, um SQL-Injections zu vermeiden, aber Parameter zu verwenden ist (bei anderen Sprachen zumindest) denke ich die gängigste Methode.

Artikel

Nettes Youtube Video eines Live-"hacks":

SQL-Injection

void 11.12.2006 23:27

aaaaaaaalles klar =)

void 11.12.2006 23:32

Zitat:

Original geschrieben von delphirocks
Nettes Youtube Video eines Live-"hacks":

SQL-Injection

hmmm, aber um JS zu deaktivieren brauche ich nicht mehr den quellcode editieren *lol*

Blauer Kuckuck 12.12.2006 11:42

Hi,

vielen Dank erstmal für eure Vorschläge

ich hab alles ausprobiert-

Der Quelltext sieht momentan so aus:

PHP-Code:

<?php
  
  
include "config.php";
  
  
  
$autor $_POST["autor"];
  
$inhalt $_POST["inhalt"];
  
$titel $_POST["titel"];
  
$upid $_POST["upid"];
  
  @
mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die (mysql_error());
  
mysql_select_db(MYSQL_DATABASE) OR die (mysql_error());
  

  
  
  
$result mysql_query("
              UPDATE
                news
              SET
                Autor = 'addslashes($autor).',
                Datum = NOW(),
                Inhalt = '.addslashes($titel).',
                Titel = '.addslashes($titel).'
              WHERE
                ID = '.intval($upid).' LIMIT 1"
);
  
  
                  
  If (!
$result) {
      die(
mysql_error());
  } else {
      echo 
"Done.";
  }
  
?>

Beim Aufruf der Datei (Ich versuche, einen Newseintrag zu ändern), kommt keine Fehlermeldung mehr, sondern die selbst einprogrammierte Meldung "Done."

Leider ist der Eintrag nicht verändert worden.

Kann jemand den Fehler entdecken?

thx im Voraus,

Kuckuck

Blauer Kuckuck 12.12.2006 11:42

Hi,

vielen Dank erstmal für eure Vorschläge

ich hab alles ausprobiert-

Der Quelltext sieht momentan so aus:

PHP-Code:

<?php
  
  
include "config.php";
  
  
  
$autor $_POST["autor"];
  
$inhalt $_POST["inhalt"];
  
$titel $_POST["titel"];
  
$upid $_POST["upid"];
  
  @
mysql_connect(MYSQL_HOSTMYSQL_USERMYSQL_PASS) OR die (mysql_error());
  
mysql_select_db(MYSQL_DATABASE) OR die (mysql_error());
  

  
  
  
$result mysql_query("
              UPDATE
                news
              SET
                Autor = 'addslashes($autor).',
                Datum = NOW(),
                Inhalt = '.addslashes($titel).',
                Titel = '.addslashes($titel).'
              WHERE
                ID = '.intval($upid).' LIMIT 1"
);
  
  
                  
  If (!
$result) {
      die(
mysql_error());
  } else {
      echo 
"Done.";
  }
  
?>

Beim Aufruf der Datei (Ich versuche, einen Newseintrag zu ändern), kommt keine Fehlermeldung mehr, sondern die selbst einprogrammierte Meldung "Done."

Leider ist der Eintrag nicht verändert worden.

Kann jemand den Fehler entdecken?

thx im Voraus,

Kuckuck

Philipp 12.12.2006 11:47

So wird das nicht funktionieren:

PHP-Code:

$result mysql_query(
              UPDATE 
                news 
              SET 
                Autor = 'addslashes($autor).', 
                Datum = NOW(), 
                Inhalt = '.addslashes($titel).', 
                Titel = '.addslashes($titel).' 
              WHERE 
                ID = '.intval($upid).' LIMIT 1"
); 

Das ganze sollte eher so aussehen:

PHP-Code:

$result mysql_query(
              UPDATE 
                news 
              SET 
                Autor = '"
.addslashes($autor)."', 
                Datum = NOW(), 
                Inhalt = '"
.addslashes($inhalt)."', 
                Titel = '"
.addslashes($titel)."' 
              WHERE 
                ID = '"
.intval($upid)."' LIMIT 1"); 


Blauer Kuckuck 12.12.2006 11:56

Hi,

@Philipp:

Danke für deine Mühe...

Also,

mit meinem Code hats doch funktioniert.


Zitat:

Datei update.php
PHP-Code:

          echo "
                <html><head><title>News ändern</title></head><body><form action=\"updater.php\" method=\"POST\">
                <input disabled name=\"upid\" type=\"text\" size=\"5\" value=\""
.$upid."\">

                <input name=\"autor\" type=\"text\" size=\"20\" value=\""
.$row['Autor']."\">

                <input name=\"titel\" type=\"text\" size=\"20\" value=\""
.$row['Titel']."\">

                <textarea name=\"inhalt\" cols=\"40\" rows=\"20\">"
.$row['Inhalt']."</textarea>


                <input type=\"submit\" value=\"OK\">
                </form></body></html>"



Da habe ich das disabled weggelassen. Anscheinend wurde das nicht mit dem restlichen Formular zu "updater.php" weggeschickt.

Rausbekommen hab ichs, indem ich ganz oben error_reporting auf E_ALL gestellt habe, und prompt kam die Ausgabe "Undefinied Index" ...

THX trotzdem...

Kuckuck


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag