Was genau macht PDO sicher? [Duplikat]

8

Für diejenigen von uns, die neu bei PDO sind, bekommen wir, dass es sicherer ist und dass es besser ist zu benutzen, aber was ich nicht umgehauen kann ist, wie ist das gesichert?

%Vor%

Wohlverstanden, ich verstehe, was es tut, aber was genau tut es, um die Eingaben zu bereinigen? Ich weiß, mysql_* verwenden mysql_real_escape_string , die nur das Literal \ setzen. Verwendet PDO das gleiche System? Wenn nicht, worauf verlassen wir uns bei der Sanierung?

    
Nick 29.01.2013, 15:20
quelle

2 Antworten

4

Es scheint nichts zu geben, was als Eingabe in Ihrer Abfrage zu bereinigen wäre. Darüber hinaus, wenn Sie nur Ihre Abfrage einfügen, wird es nichts dagegen tun.

Aber es hat die Magie vorbereitete Aussagen , die Ihnen hilft. Sie können den @ yourcommonsense-Link für weitere Informationen überprüfen:

Wie können vorbereitete Anweisungen vor SQL schützen? Injektion Angriffe?

    
Nanne 29.01.2013, 15:25
quelle
-1

PDO hat die Methode PDO::Quote() , die den gleichen Job ausführt wie mysql_real_escape_string() . Dies bietet im Wesentlichen die gleiche Funktionalität und das gleiche Sicherheitsniveau.

Eine bessere Option ist die Funktion "Vorbereitete Anweisungen", bei der Sie anstelle der Variablen PDO::prepare() Markierungen in die Abfrage einfügen und dann PDO::execute() verwenden, um die Variablen an die Abfrage zu übergeben.

Dies ist sicherer, da es die internen Mechanismen der Datenbank-Engine verwendet, um die Variablen in die Abfrage zu übertragen. Es gibt keine Möglichkeit eines SQL-Injection-Angriffs über eine vorbereitete Anweisung (es sei denn, die Datenbank-Engine selbst weist einen Fehler auf, aber das würden Sie mildern, indem Sie Ihre MySQL-Version auf dem neuesten Stand halten; nichts mit Ihrem eigenen Code zu tun). p>

Vorbereitete Anweisungen haben auch den Vorteil, dass sie von der Datenbank-Engine zwischengespeichert werden können. Wenn Sie also mehrere Aufrufe mit derselben Abfrage, aber mit unterschiedlichen Variablenwerten ausführen, erhalten Sie eine Leistungssteigerung im Vergleich zur Ausführung derselben Abfragen mit dem alten zeichenfolgenbasierten Mechanismus.

Hinweis: Einige DBs können vorbereitete Anweisungen nativ nicht unterstützen. In diesem Fall emuliert PHP sie. In diesem Fall entspricht dies im Wesentlichen der Verwendung von PDO::Quote , und Sie erhalten die oben aufgeführten Vorteile nicht. Die meisten DBs unterstützen sie zwar, aber selbst dann ist es möglich, sie zu deaktivieren, also stelle sicher, dass du ATTR_EMULATE_PREPARES deaktivierst.

Schließlich ist die Verwendung von PDO sicherer, da die alte mysql-Erweiterung einige grundlegende Sicherheitsprobleme aufwies. Zum Beispiel verschlüsselt die alte API nicht die Kommunikation zwischen PHP und der MySQL-Datenbank. Dies bedeutet, dass theoretisch ein Risiko eines Lauscherangriffs besteht, insbesondere wenn sich die DB nicht auf dem gleichen Server wie PHP befindet. PDO verwendet eine neuere Version des MySQL-Comms-Protokolls und ist somit in der Lage, diesen Datenverkehr zu verschlüsseln und ist daher sicherer (und auch deshalb, weil PDO wirklich alte Versionen von MySQL nicht unterstützt). Es gibt eine Handvoll anderer ähnlicher versteckter Risiken mit der alten API, die so tief im Code verankert waren, dass sie nicht entfernt werden konnten. Aus diesem Grund wurde die Erweiterung mysqli als direkter Ersatz dafür geschrieben.

    
SDC 29.01.2013 16:13
quelle

Tags und Links