Den Krieg erklären auf SQL-Injection-Angriffe
SQL-injection-Angriffe auch weiterhin zu den fruchtbarsten gegen Webseiten und Anwendungen. Und warum nicht? Aus der Perspektive eines Angreifers, der Datenbank hinter vielen Web-Anwendungen ist, wo die wirklich saftige Ziele Leben. Das ist, wo finden Sie Kundendaten, Kreditkartennummern und andere gute Sachen.
Und jetzt Angreifer haben begonnen, mithilfe von SQL injection auf Schadsoftware auf Web-sites, so dass Besucher dieser Seiten erhalten Sie Ihren Computer infiziert mit malware. Die Datenbanken sind nicht nur, wo die juicy targets sind; Sie sind reif für die Pflanzen schädliche Daten, die infiziert andere Menschen zu übertragen.
Dies erhöht den Einsatz und lässt einen noch mehr überzeugende Argumente für die Beseitigung jeder einzelnen SQL-injection-Mangel Existenz. Wir sollten sicherstellen, dass Sie keine Zukunft haben Anwendungen SQL-injection-Mängel. Werfen wir einen genaueren Blick, um zu sehen, was beteiligt ist.
SQL oder Structured Query Language, ist eine interpretierte Datenbank-Sprache, die Häufig von application Servern reden zu Datenbank-Servern. Die Datenbanken sind da, wo, wie ich schon sagte, wir speichern Dinge wie die Kunden-Datensätze. Ein Datensatz besteht der Kunde name, Adresse, e-mail, Adresse, Telefonnummer und Kreditkarteninformationen.
Wie es Funktioniert
Die Sicht eines Kunden, die Daten in eine Datenbank, eine SQL-Abfrage konstruiert, in dem application server und an die Datenbank geschickt, die sollten zurückkehren, dass Kunden Informationen und nichts mehr. Die Abfrage könnte ungefähr so Aussehen:
select * from Kunden where Nachname='Smith'
Also, was ist der big deal? Gut, im application Server, der name des Kunden wird in der Regel dargestellt als eine variable mit einem Wert, der in die Anwendung über ein Web-Formular -- mit Daten, die aus der Anwendung des Benutzers. Also, in Java, die Abfrage könnte gebaut werden, so etwas wie die folgenden:
String query = "Select * from Kunden where Nachname='" + req.getParameter("lastName") + "'";
Sehe das problem noch? Naja, in den normalen funktionalen Fall, ein Benutzer einen Nachnamen wie "Müller" in das Feld, aber ein Angreifer könnte genauso einfach geben Sie den Wert "" oder '1'='1'-". Das führt zu einer Abfrage wie der folgenden an den server gesendet werden:
select * from Kunden where Nachname=" or '1'='1'
Dass booleschen Ausdruck (last_name=" or '1'='1') ist immer true, wird der Datenbank-server reagiert mit dem gesamten Inhalt des Kunden-Daten-Tabelle. Das heißt, unsere Angreifer hat wahrscheinlich gerade erfolgreich in der Gewinnung der Daten der Kunden von jedem unserer Kunden. Nicht gut.
Aber ich wollte sagen, das problem ist einfach zu beheben. Sie sehen, das zugrunde liegende Problem in der oben genannten Szenario ist, dass die Absicht der SQL-Logik kann geändert werden, durch die formatierten Nutzdaten. Aber Java und die meisten Web-bezogene Sprachen bieten uns eine einfache Lösung namens parametrisierte Abfragen.
In einer parametrisierten Abfrage, die Daten an die SQL-Abfrage als die tatsächlichen Daten, die nicht als Teil der SQL-syntax selbst. Es dauert nur ein wenig mehr Aufwand beim einrichten der Abfrage, aber dann ist es geschafft, und alle Daten, die von einem Angreifer nichts zum alter der Absicht, unsere Abfrage.
Wie es zu Lösen ist
Hier ist, was unsere obige Abfrage würde wie folgt Aussehen, wenn wir Java ' s parametrisierte Abfrage-Mechanismus, bekannt als vorbereitete Anweisungen:
String name = req.getParameter("lastName"); String query = "Select * from Kunden where Nachname = ?" PreparedStatement pstmt = Verbindung.prepareStatement( query ); pstmt.setString(1, name ); try { ResultSet results = pstmt.execute( ); }
OK, also ist es ein paar Zeilen mehr code, aber es ist ein einfaches Muster zu Folgen. Und die Ergebnisse sind funktionell identisch zu den gefährdeten form -- aber ohne die Sicherheitslücke.
Wenn wir gehen Sie einfach durch unsere Web-Anwendungen und ändern Sie alle unsere SQL-Abfragen in form von einer vorbereiteten Anweisung, können wir komplett auslöschen jedes einzelne SQL-injection-Schwäche in der Welt. Ernst.
Wir haben noch viele andere Probleme zu behandeln, wie cross-site-scripting (auch bekannt als "XSS"), aber wir werden beseitigt haben, dies ein Problem der SQL-injection völlig.
Ich weiß, was Sie denken: Es kann nicht so einfach sein, sonst hätten wir das getan haben, Weg mit der SQL-injection Jahren. Das wäre nur teilweise richtig ist. Auf einem technischen Niveau, es ist so simpel. Aber auf einer menschlichen Ebene, nicht so sehr.
Um das problem zu beheben von SQL-injection, mehrere Voraussetzungen vorhanden sein müssen. Man, wir müssen Zugriff auf den Quellcode der Anwendung selbst. Wenn unser Antrag wurde ausgelagert, oder wenn wir verlassen uns auf Drittanbieter-code, dies kann nicht so eine einfache Sache überhaupt.
Und das ist nur eines der menschlichen Hürden, die ich gehört habe als Entschuldigung für nicht in Ordnung ein Sicherheits-Mangel. Es gibt viele andere.
Aber komm, Leute, wir verdienen besser als der status quo. Unsere Unternehmen verdienen besser, unsere Nutzer besser verdient; und in der Tat, die unsere Kunden verdienen besseres. Lasst uns aufhören, Entschuldigungen und Gründe. Machen Sie es ein Ziel, gehen Sie durch Ihre Web-Anwendungen und auszurotten, jedes einzelne SQL-injection-Schwäche. Und während Sie gerade dabei sind, sicher sein, zu lehren, jede und jeder von Ihren software-Entwicklern, wie Sie tun, sicher SQL-Aufrufe.
Nicht mehr SQL-injection. Keine Ausreden mehr.
Autor: Keylogger.Org Team