Die Lilupophilupop-SQL-Injection

SQL-Injections gehören im Internet-Zeitalter zu den größten Schwachstellen von Servern. Dabei werden Sicherheitslücken der Komponenten ausgenutzt, um über die Datenbanksprache SQL  eigene Befehle an die Datenbank abzusetzen. So eine Methode, die sogenannte Lilupophilupop.com-SQL-Injection, hatte nach einem Bericht des Internet Storm Center inzwischen schon bei über einer Million Webserver Erfolg. Die Anzahl infizierter Seiten steigt noch weiter. Anfang Dezember waren es erst 80 Websites. Allein in Deutschland sin aktuell 50.000 Sites betroffen. Bei Lilupophilupop werden die Internetseiten so infiziert, dass dem Besucher Schadsoftware untergeschoben wird. Ob die eigenen Seiten auch betroffen sind, kann man mit einer Suche nach der Zeichenkette " <script src=http://lilupophilupop.com" in Verbindung mit dem site:-Parameter leicht festgestellt werden. Erste Hilfe bringt die Sperrung der Domain lilupophilupop.com auf dem Server. Der Angriff funktioniert auch nur, wenn man den Microsoft IIS als Server nutzt und dort auch noch ASP und die ColdFusion-Middleware von Adobe. LAMP-Server wie beim GSL-Webservice verwendet, sind gegen die Attacke sicher.

2012-01-07T08:51:10+02:00Januar 7th, 2012|Allgemein, MySQL|Kommentare deaktiviert für Die Lilupophilupop-SQL-Injection

MySQL: Nehme ich JOIN oder WHERE?

Als SQL-Programmierer steht man häufig vor der Frage, was eine bessere Performance hat, ein schwieriger zu lesender und verstehender JOIN oder eine entsprechende WHERE-Klausel. Als Beispiel seien hier zwei verschiedene Wege zu einer Abfrage gezeigt, mit der alle Kunden ausgewählt werden, bei denen die Kundennummer und der Typ in den beiden Tabellen kunden und kunden_tel übereinstimmen und die eine Kundennummer  größer als 1 haben: SELECT * FROM kunden JOIN kunden_tel ON (kunden.nr = kunden_tel.kunden_nr AND kunden.typ = kunden_tel.kunden_typ) WHERE kunden.nr > 1;   SELECT * FROM kunden, kunden_tel WHERE kunden.nr = kunden_tel.kunden_nr AND kunden.typ = kunden_tel.kunden_typ AND kunden.nr > 1; Beide Abfragen wurden auf eine Kundentabelle mit ca. 50.000 Datensätzen und eine Telefontabelle mit ca. 200.000 Einträgen losgelassen, das Resultat für die beiden Varianten war nahezu gleich bei 15,5 Sekunden. Die Variante SELECT mit WHERE war marginal schneller. Deshalb sollte man überlegen, diese häufiger vorkommende Variante, die auch auf Anhieb von mehr Programmierern verstanden wird, zu wählen. Wenn schon kein nennenswerter Geschwindigkeitsgewinn erzielt werden kann, sollte man die für Andere leichter lesbare Variante nutzen.

2011-07-25T08:23:21+02:00Juli 25th, 2011|MySQL|Kommentare deaktiviert für MySQL: Nehme ich JOIN oder WHERE?

PHP und MySQL per mysqli

Es gibt drei verschiedene Möglichkeiten für den PHP-Programmierer, auf MySQL-Datenbanken zuzugreifen. Das sind mysql, mysqli und PDO. Üblich ist die Verwendung von mysql, denn damit bleibt man kompatibel zu 4er Versionen von PHP. PDO ist ja auch schon länger bekannt und nicht datenbankspezifisch, hat sich aber unter Entwicklern kaum verbreitet. Hier geht es um die objektorientierte mysqli-Schnittstelle, die eine elegante Programmierung und die Unterstützung von Prepared Statements bietet. Was ist also anders? Dazu ein typisches Beispiel: // Verbindung instanziieren $mysqli = new mysqli("localhost","Benutzer","Passwort","Datenbankname") // Verbindung testen if (mysqli_connect_errno()) { echo "Keine Verbindung!".mysqli_connect_error(); exit(); } // Zeichensatz einstellen $mysqli->set_charset("utf8"); … weiterer Programmcode … // Verbindung trennen $mysqli->close();

2011-05-19T08:21:53+02:00Mai 19th, 2011|MySQL, PHP|Kommentare deaktiviert für PHP und MySQL per mysqli
Nach oben