hawkmaster: Scripte, Anwendung ändern, Sicherheit, Datenbanken??

Hallo zusammen,
Es gibt eine kleine Web Anwendung die nur für einen eingeschränkten Anwenderkreis in einem Intranet zur Verfügung steht. Das ganze läuft auf WAMP mit Apache 2 und PHP5 und Mysql 5. Bisher läuft der Apache bzw. PHP mit aktiviertem "magic_quotes_gpc". Die Daten wurden nur teilweise validiert. "Mysql_real_escape_string" wurde nicht verwendet. Die Mysql verbindung bzw. Abfragen und Inserts wurden mit "mysql()" gemacht.
Soviel zum IST Stand.
Ich möchte nun die Scripte und Anwendung auf Vordermann bringen.
Dazu folgende Überlegungen wozu ich euren Rat brauche:
1. Ich würde gerne in Zukunft "magic_quotes" deaktivieren und alle Daten und Input validieren und jeden Update und Insert mit "mysql_real_escape_string" ändern, so wie im Handbuch beschrieben.
-----------------
if(get_magic_quotes_gpc()) {
$product_name = stripslashes($_POST['product_name']);
$product_description = stripslashes($_POST['product_description']);
} else {
$product_name = $_POST['product_name'];
$product_description = $_POST['product_description'];
}
// einen sicheren Query zusammenstellen
$query = sprintf("INSERT INTO products (name, description, user\_id) VALUES ('%s', '%s', %d)",
mysql_real_escape_string($product_name, $link),
mysql_real_escape_string($product_description, $link),
$_POST['user_id']);
mysql_query($query, $link);
------------------------------
2. Oder sollte man gleich auf "mysqli" und Objektorientiert umsteigen?

3. eine Überlegung ist auch, die Anwendung event. mal in Zukunft mit anderen Datenbanken wie etwa MS SQL laufen zu lassen.
Daher überlege ich ob es nicht sinnvoll ist gleich auf Pear MDB2 oder PDO umzusteigen? Damit habe ich aber bisher überhaupt keine Erfahrung.
Kann man hier auch etwas wie "mysql_real_escape_string" verwenden?
Gibt es auch etwas wie "mysql_insert_id"?

Ich bin für jede Anregung dankbar.

viele Grüße
hawk

  1. Hallo liebe SELFHTMLer,

    .. '%s', '%s', %d ...

    Kann mir einer das erklären?
    Ich lese das oft in Querys, aber bisheriges spontanes Suchen brachte keine weitere Erkenntniss.
    Auch ein Link wäre mir sehr hilfreich.

    Danke...

    LG
    kev1n

    --

    SELFCODE:
    sh:( fo:| ch:? rl:° br:^ ie:{ mo:| va:) de:] zu:) ss:| ls:[ js:|
    ---
    1. Hallo,
      das hat im Prinzip erst mal nichts mit Querys zu tun.
      Es gehört zur Funktion "sprintf"

      Im Prinzip sind das eine Art "Platzhalter"

      %s bedeutet das ein String eingesetzt wird
      $d ist für Integer oder dual werte.

      Mehr Infos findest du bei der sprintf Funktion im PHP Handbuch

      Gruss
      Hansjörg

      Hallo liebe SELFHTMLer,

      .. '%s', '%s', %d ...

      Kann mir einer das erklären?
      Ich lese das oft in Querys, aber bisheriges spontanes Suchen brachte keine weitere Erkenntniss.
      Auch ein Link wäre mir sehr hilfreich.

      Danke...

      LG
      kev1n

  2. echo $begrüßung;

    if(get_magic_quotes_gpc()) {
    $product_name = stripslashes($_POST['product_name']);
    $product_description = stripslashes($_POST['product_description']);
    } else {
    $product_name = $_POST['product_name'];
    $product_description = $_POST['product_description'];
    }

    Wenn sich die Magic Quote nicht komplett deaktivieren lassen, empfehle ich immer ihre Auswirkungen einmalig am Scriptanfang zu beseitigen. Dafür eignet sich recht gut das Beispiel aud dem Kapitel Disabling Magic Quotes. Man hat dann nur noch eine einzige Stelle, die man beim Umstieg auf PHP6 entfernen muss.

    1. Oder sollte man gleich auf "mysqli" und Objektorientiert umsteigen?

    Die Frage musst du dir selbst beantworten. Objektorientiert oder nicht, ist hier nicht die entscheidende Frage, eher ob du die Features von mysqli/PDO/usw., wie beispielsweise Prepared Statements, nutzen möchtest, und sei es nur, um dir das Escapen zu sparen, ohne den Vorteil der Vorparsens nutzen zu wollen/können.

    1. eine Überlegung ist auch, die Anwendung event. mal in Zukunft mit anderen Datenbanken wie etwa MS SQL laufen zu lassen.
      Daher überlege ich ob es nicht sinnvoll ist gleich auf Pear MDB2 oder PDO umzusteigen? Damit habe ich aber bisher überhaupt keine Erfahrung.
      Kann man hier auch etwas wie "mysql_real_escape_string" verwenden?

    Man muss das bei jedem System, das Code und Daten zusammen in einen Text mischt. Das hat ja nicht nur sicherheitstechnische Bewandnis, sondern ist Voraussetzung, dass das Gemischt-Konzept funktioniert.

    Gibt es auch etwas wie "mysql_insert_id"?

    Jein. PDO simuliert das (mit Einschränkungen) für die Systeme, die das nicht können (PDO->lastInsertId().
    Ein anderes Konzept als auto_increment ist die Verwendung von Sequenzen. Man fordert dort einen Wert an, den man zu Fuß in die Tabelle(n) einträgt.

    echo "$verabschiedung $name";