Kann mysql_real_escape_string ALLEIN verhindern, dass alle Arten von sql-injection ?
Mögliche Duplikate:
SQL-injection, die herum mysql_real_escape_string()
Ich habe nicht gesehen, alle valuabe oder nicht veraltete Informationen zu diesem Thema.
Also, es gibt diese Frage: Funktioniert mysql_real_escape_string() KOMPLETT Schutz vor SQL-injection? Aber es ist sehr veraltet(seine ab '09), so wie in php 5.3 und mysql 5.5 in '12, die gilt es zu schützen, voll und ganz ?
- In der Theorie ja 🙂
- Bitte für die Liebe von Zaphod Beeblebrox upgrade selbst zu prepared statements via PDO oder mysqli-Erweiterung.
mysql*
ist ein Dinosaurier, die nie verwendet werden soll. Wenn so viele "tutorial" Seiten nicht stur weiter zu benutzen, die PHP-dev-team würde schon veraltet es. Neue Anhänger für diese rückwärts-Praxis geprägt werden täglich, weil Sie es nicht besser wissen, und nach allem, "das tutorial sagte, ich könnte es so machen." Prepared statements sind der richtige Weg, um zu verhindern, dass SQL-injection. - Quelle: news.php.net/php.internals/53799
- danke @rdlowrey, war mein Kopf denken "everyones mit mysql, wie schlimm kann es werden !?" anscheinend haben Sie Recht.
- Ich habe etwas recherchiert über mysqli, wie es scheint, dass ich nicht über die Verwendung "mysql_real_escape_string" an alle. und sql-injection unmöglich ist, und alles, was ich einfügen, ist der eigentliche text, ohne mich worring über alles. Ich will einfach nur, um dies zu bestätigen, ist es wahr ?
mysqli
hat eine entsprechende Methode: mysqli_real_escape_string. Die Sache ist, der ganze Punkt meines Kommentars ist, dass Sie sollten verwenden Sie vorbereitete Anweisungen, die negiert die Möglichkeit der Injektion ohne die Notwendigkeit für die manuelle entkommen. Werfen Sie einen Blick auf die Dokumentation für mysqli::prepare für mehr info.- Möglich, Duplikat der SQL-injection, die herum mysql_real_escape_string()
Du musst angemeldet sein, um einen Kommentar abzugeben.
mysql_real_escape_string ALLEIN kann verhindern, dass nichts.
Darüber hinaus diese Funktion hat nichts zu tun mit Injektionen an alle.
Wann immer Sie brauchen, zu entkommen, müssen Sie es trotz der "Sicherheit", aber nur weil ist es erforderlich, die von der SQL-syntax. Und wo brauchen Sie es nicht, die Flucht wird nicht helfen, Sie sogar ein bisschen.
Durch die Nutzung dieser Funktion ist einfach: wenn Sie verwenden müssen, eine Zeichenfolge in Anführungszeichen ein in der Abfrage, die Sie haben zu entkommen, es ist Inhalt. Nicht, weil einige imaginäre "böswillige Benutzer", sondern nur die Flucht diese Zitate, die verwendet wurden, zu trennen einen string. Dies ist sehr einfache Regel, aber extrem Irre durch die PHP-Leute.
Dies ist nur syntax-bezogene Funktion, nicht die Sicherheit.
Abhängig von dieser Funktion in Sicherheitsfragen, zu glauben, dass es "sichern Sie Ihre Datenbank vor böswilligen Benutzer" WIRD führen Sie die Injektion.
Eine Schlussfolgerung, die Sie selbst gestalten können:
Nein, diese Funktion ist nicht genug.
Prepared statements ist keine silberne Kugel zu. Es deckt Ihren Rücken für nur die Hälfte der möglichen Fälle. Finden Sie die wichtig: zusätzlich habe ich gemacht, um die berühmte Frage für die details
lange Zeit, da Las ich einen blog-post über dieses, so kann es nicht mehr für wahr halte, ABER...
Posts erklärt, dass, wenn Sie hatte, unicode-kodierte Zeichen in der Zeichenfolge, die Sie fehlen würden, die durch real-escape-string wäre aber bewertet von mysql-engine - spielen auf die Idee, Sie könnten ja noch offen sein, um einen gut Platzierten Einspritzung.
Ich kann mich nicht erinnern, den blog-post aber diese Frage hier ist in der gleichen Kugel-park.
Ja. Richtig durch die Flucht der string mit dem nativen mysql-escape-Funktionen, es ist nicht möglich, Sie zu "brechen" und eine Abfrage ausführen.
Jedoch ein besserer Ansatz wäre die Verwendung von prepared statements. Dies wird eine Anzahl von Sachen tun. Durch die Verwendung von prepared statements nutzen Sie noch mehr Optimierung aus der Datenbank, und es wird richtig entziehen sich jeglicher Daten übergeben. Werfen Sie einen Blick auf: http://php.net/manual/en/mysqli.prepare.php