Carsten Eilers Selbstständig

Das größte Problem für PHP 5.6 (und alle älteren Versionen) ist der fehlende Support. In PHP wurden schon etliche, auch kritische Schwachstellen gefunden und behoben. Glaubt wirklich irgendjemand, dass in Zukunft keine mehr gefunden werden?

Seit dem Ende des Jahres 2018 wird PHP 5.x nicht mehr unterstützt. Das heißt insbesondere: Jede seit Anfang Januar 2019 entdeckte Schwachstelle ist und bleibt eine Zero-Day- Schwachstelle – es wird keinen Patch dafür geben. Aber wie sieht es sonst noch so mit der Sicherheit von PHP 7.x im Vergleich zu PHP 5.x aus?

Im PHP Magazin 5.2013 habe ich über die Entwicklung der Sicherheit von PHP im Lauf der Zeit berichtet. Zwei herausragende Entwicklungen damals: In PHP 5.5 wurde ein API zum Berechnen von Passwort-Hashes eingeführt und die klassische MySQL-Erweiterung wurde als Deprecated, also überholt gebrandmarkt. Inzwischen ist sie Geschichte: In PHP 7.0 wurde sie entfernt. Weshalb ich damit auch anfangen möchte.

MySQL ist tot, es lebe MySQLi!

Wenn Sie die MySQL-Erweiterung verwendet haben, mussten Sie zu MySQLi oder PDO_MySQL wechseln (oder sich eine andere Datenbank suchen, aber das wird wohl kaum jemand getan haben). Das geht im Fall von MySQLi recht einfach und ich hoffe, Sie haben diesen einfachen Weg nicht genommen. Oder sind zumindest danach noch einen Schritt weiter gegangen.

Von MySQL zu MySQLi – Der leichte Weg

Wenn Sie eine Datenbankabfrage mit der MySQL-Erweiterung wie z. B. in Listing 1 in eine Abfrage mit MySQLi umwandeln wollen ändert sich wenig:

  • Beim Aufbau der Verbindung zum Datenbankserver geben Sie bei MySQLi auch gleich die gewünschte Datenbank an, die in der MySQL-Erweiterung separat ausgewählt wurde.
  • Alle mysql_-Aufrufe werden zu entsprechenden mysqli_-Aufrufen.
// Verbindung zum MySQL-Server herstellen
$connection = mysql_connect($dbserver,$dbuser,$dbpassword);

if ($connection) {
  // Verbindung zum MySQL-Server besteht

  // Datenbank auswählen
  $db = mysql_select_db($dbname);

  if ($db) {
    // Verbindung zur Datenbank besteht

    // Daten abfragen
    $query = "SELECT benutzername FROM benutzer_tabelle WHERE ort = '".$ort."'";
    $result = mysql_query($query);

    if ($result) {
      // Abfrage erfolgreich

      while(  $row = mysql_fetch_array($result) ) {
        // Daten ausgeben oder sonstwie verarbeiten
        // ...
      }

    } else {
      // Fehler beim Holen der Daten
      echo "Fehler beim Holen der Daten: <br>\n";
      echo "MySQL-Fehler: ".mysql_errno().": ".mysql_error()."<br> \n";
    }
  } else {
    // Keine Verbindung zur Datenbank
    echo "Fehler bei der Verbindung mit der Datenbank:<br> \n";
    echo "MySQL-Fehler: ".mysql_errno().": ".mysql_error()."<br> \n";
  }

} else {
  // Keine Verbindung zum MySQL-Server
  echo "Fehler bei der Verbindung mit dem MySQL-Server:<br> \n";
  echo "MySQL-Fehler: ".mysql_errno().": ".mysql_error()."<br> \n";
}

Das Ergebnis sieht zudem sehr ähnlich aus, die Änderungen halten sich in überschaubaren Grenzen und sind relativ schnell erledigt, oft reicht dazu ja Suchen und Ersetzen aus.

Den vollständigen Artikel lesen Sie in der Ausgabe:

PHP Magazin 3.19 - "PHP 5.x und PHP 7.x"

Alle Infos zum Heft
579883309PHP 5 und 7: Die Risiken alter Versionen
X
- Gib Deinen Standort ein -
- or -