Frage

PHP verwendet standardmäßig "magische Zitate", hat aber viel Flak dafür bekommen. Ich verstehe, dass es in der nächsten Hauptversion von PHP deaktiviert wird.

Während die Argumente dagegen sinnvoll sind, verstehe ich es nicht, warum nicht einfach die HTML -Entitäten verwenden, um Zitate darzustellen, anstatt Schrägstriche zu entfernen und zu entfernen? Schließlich wird eine überwiegende Mehrheit von MySQL zur Ausgabe an Webbrowser verwendet?

Zum Beispiel wird 'verwendet anstelle von' und es wird sich nicht auf die Datenbank auswirken.

Eine andere Frage, warum PHP nicht nur Konfigurationen für jede Version von PHP mit diesem Tag einrichten kann

Nur neugierig. :)

War es hilfreich?

Lösung

Hier ist ein guter Grund, hauptsächlich als Antwort auf Ihre eigene Antwort: Verwenden htmlspecialchars() oder htmlentities() tut nicht Machen Sie Ihre SQL -Abfrage sicher. Das ist, was mysql_real_escape_string () ist für.

Sie scheinen davon auszugehen, dass es nur die einzelnen und doppelten Zitatzeichen sind, die ein Problem darstellen. MySQL -Abfragen sind tatsächlich anfällig für die \x00, \n, \r, \, ', " und \x1a Zeichen in Ihren Daten. Wenn Sie keine vorbereiteten Aussagen verwenden oder mysql_real_escape_string(), Dann haben Sie eine SQL -Injektionsanfälligkeit.

htmlspecialchars() und htmlentities() Konvertieren Sie nicht alle diese Charaktere. Ergo können Sie Ihre Abfrage nicht mit diesen Funktionen sicher machen. Zu diesem Zweck, addslashes() macht Ihre Abfrage auch nicht sicher!

Andere kleinere Nachteile umfassen das, was die anderen Poster bereits über MySQL erwähnt haben, nicht stets Für Webinhalte sowie die Tatsache, dass Sie die für Ihre Daten benötigte Menge an Speicher- und Indexraum erhöhen (betrachten Sie ein Speicherbyte für ein Angebotszeichen gegenüber sechs oder mehr Bytes Speicher für das Entitätsformular).

Andere Tipps

Putten ' In eine String -Spalte in einer Datenbank wäre in Ordnung, wenn Sie nur den Datenbankinhalt für eine Webseite ausgeben. Das stimmt aber nicht.

Es ist besser, sich aus der Ausgabe zu entkommen, wenn Sie sie ausgeben. Dies ist das einzige Mal, dass Sie sicher wissen, dass die Ausgabe zu einer Webseite geht - keine Protokolldatei, eine E -Mail oder ein anderes Ziel.

PS: PHP schaltet Magic Quotes in der Standard -Php.ini -Datei bereits standardmäßig aus. Es ist in PHP 5.3 veraltet und wird aus der Sprache vollständig in PHP 6.0 entfernt.

Ich werde nur auf Ihre erste Frage antworten.

Validierung von Eingang Ist sowieso ein falscher Ansatz, denn es ist keine Eingabe, die zählt, das Problem ist, wo es verwendet wird. PHP kann nicht davon ausgehen, dass alle Eingaben in eine MySQL -Abfrage in einen Kontext ausgegeben werden, in dem eine HTML -Entität sinnvoll wäre.

Es ist schön zu sehen, dass Magic_quotes geht; Es ist die Ursache für viele Sicherheitsprobleme mit PHP, und es ist schön zu sehen, dass sie einen neuen Ansatz verfolgen :)

Sie werden sich selbst einen großen Gefallen tun, wenn Sie Ihre Validierungsansätze neu gestalten, um die Ausgabe zu validieren, für den Kontext, in dem Sie arbeiten. Nur Sie, wie der Programmierer, können dies wissen.

Der Grund, warum MySQL nicht konvertiert ' zu ' Denn ' ist nicht '. Wenn Sie Ihre Daten für die Ausgabe konvertieren möchten, sollten Sie dies in der View -Ebene tun, nicht in Ihrer Datenbank. Es ist wirklich nicht sehr schwer, nur anzurufen htmlentities Vor/wenn Sie wiederkommen.

Vielen Dank an alle. Ich musste wirklich darüber nachdenken, was Sie gemeint haben und welche Auswirkungen es haben könnte, wenn ich die Zitate in HTML -Entitäten ändere, anstatt ihnen Schrägstriche hinzuzufügen, aber nicht auch die Ausgabe/Eingabe tatsächlich ändert?

Ich kann mir keinen Grund vorstellen, warum wir HTML -Entitäten für MySQL nicht verwenden können oder sollten, solange wir klarstellen, dass alle Daten mit HTML -Entitäten codiert werden. Schließlich basiert mein Argument auf der Tatsache, dass die Mehrheit von MySQL zur Ausgabe von HTML -Browsern und der Tatsache, dass "und / / kann MySQL -Datenbanken ernsthaft schädigen können. "Und / als HTML -Entitäten, bevor Sie sie als Einfügen von Abfragen senden? Außerdem gehen wir XML. Warum also Zeit damit verschwenden, HTMLentities und StripsLashes zu schreiben, und fügt Fügt hinzu, wenn Sie auf Daten zugreifen, die bereits in HTML -Entitäten codiert sind?

Sie können nicht einfach konvertieren ' zu '. Denken Sie darüber nach: Was passiert, wenn Sie die Zeichenfolge speichern möchten "'"? Wenn Sie aufbewahren ' Wenn Sie dann die Seite laden, wird sie angezeigt ' und nicht '.

Jetzt müssen Sie also alle HTML -Entitäten konvertieren, nicht nur Zitate. Dann fangen Sie an, alle möglichen seltsamen Conversion -Probleme zu erreichen. Die einfachste Lösung ist nur Speichern Sie die tatsächlichen Daten In der Datenbank können Sie es dann anzeigen, wie Sie möchten. Vielleicht möchten Sie die tatsächlichen Zitate verwenden - in den meisten Fällen " und ' Schaden Sie außerhalb der Tag -Klammern keinen Schaden.

Manchmal möchten Sie möglicherweise tatsächliche HTML in einem Feld speichern und es roh anzeigen (solange es auf dem Weg ein- und ausgropiert und saniert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top