Frage

Ich nehme einen Blick auf, wie man richtig Daten zu entkommen, die von der Außenwelt kommen, bevor es zur Steuerung von Anwendungen verwendet wird, Speicher, Logik .. diese Art der Sache.

Offensichtlich mit der Magic Quotes-Direktive in Kürze in php veraltet ist 5.3.0+ und in php6 entfernt, wird dies noch dringlicher, für alle, die in die neuen Sprachfunktionen zu verbessern und zu erhalten, unter Beibehaltung Legacy-Code (don‘ t wir lieben es ..).

Allerdings ist eine Sache, die ich nicht gesehen habe, ist viel Diskussion über Theorie / Best Practice mit dem, was zu tun, wenn Sie Ihre Daten geschützt sind - zum Beispiel, zu speichern, mit oder ohne Schrägstriche? Ich persönlich denke, keeping entkam Daten in der DB eine schlechte Bewegung ist, will aber die Diskussion hören und einige Fallstudien vorzugsweise lesen ..

Einige Links von dem PHP-Handbuch nur als Referenz:

PHP Manual - mysql_real_escape_string

PHP Manual - htmlspecialchars

etc etc.

Irgendwelche Tipps?

War es hilfreich?

Lösung

Werfen Sie einen Blick auf vorbereitete Anweisungen. Ich weiß, in mysql dies sehr gut funktioniert und ist eine sichere Form der Daten in Ihrem databse bekommen. Es hat ein paar Performance-Vorteile zu.

http://dev.mysql.com/tech -resources / articles / 4.1 / zubereitet-statements.html

Ich habe einige mehr Ressourcen, wenn Sie interessiert sind.

Hope das ist, was Sie suchen, tc.

Edit:

Eine Sache, die ich hinzufügen kann Filter in Kombination mit Prepared Statements. Zum Beispiel prüfen, ob der Wert ein Stachel Sie FILTER_SANITIZE_STRING verwenden oder für die E-Mail verwenden Sie FILTER_SANITIZE_EMAIL.

Das spart eine gewisse Menge an Code und funktioniert sehr gut. Sie können jederzeit die Daten überprüfen, danach Ihre eigenen Methoden verwenden, aber es gibt eine Menge von Filtern, die Sie verwenden können.

Andere Tipps

  • Verwenden Sie die richtige Methode, um Daten zu entkommen, wenn Abfragen ausgeführt werden: mysql_real_escape_string, vorbereitet Abfragen, etc ...

  • Speichern von Daten in der Datenbank unverändert

  • Verwenden Sie die richtige Methode der Daten auf Ausgang zu entkommen: htmlspecialchars, etc ..

Für Datenbank arbeiten, überprüfen Sie parametrisierte Abfragen und vorbereitete Anweisungen. PDO und mysqli sind gut für das.

htmlSpecialChars ist das richtige Werkzeug Text in HTML angezeigt werden Dokumente.

Und wie Sie PHP 5.3 erwähnt, haben Sie Zugriff auf die Filterfunktionen die ein Must-Einsatz, wenn der Benutzer der Datenverarbeitung.

Für Datenbank fügt die Lösung Bind-Variablen zu verwenden ist .

Im Allgemeinen kann jedes Mal, wenn Sie sich etwas zu entkommen finden (Argument in einem Shell-Befehl, db Befehl Stück, vom Benutzer bereitgestellte HTML, etc.), bedeutet dies, dass Sie nicht die richtige Function Call (zB mit system wenn Sie eine Multi-arg Form von exec verwenden könnten), oder dass Ihr Rahmen ist mangelhaft. Der Standardansatz in einem mangelhaften Rahmen zu arbeiten, ist es zu verbessern, so dass Sie nicht darüber nachzudenken, zitiert zurückkehren können.

Das Nachdenken über Ebene zu entkommen und die Höhe der zu zitieren kann Spaß machen, aber wenn Sie wirklich, dass Spiel mit Tcl in Ihrer Freizeit gehen genießen. Für echte Arbeit, sollten Sie nicht über zitieren denken, es sei denn Sie eine Bibliothek für andere Menschen sind der Gestaltung zu verwenden, in diesem Fall sind Sie richtig zitieren sollte und lassen Sie Ihre Benutzer vermeiden, darüber nachzudenken, zu zitieren. (Und Sie sollten sehr sorgfältig dokumentieren genau, welche Art des Zitierens Sie tun und nicht tun)

Es ist ganz einfach. Alle eingehenden Daten sollten durch mysql_real_escape_string ran () , bevor sie in die Datenbank eingefügt wird. Wenn Sie wissen, braucht etwas eine ganze Zahl zum Beispiel zu sein, stellen Sie es auf eine ganze Zahl, vor dem Einlegen, usw. Denken Sie daran, diese gerade ist SQL-Injektion zu stoppen. XSS und Datenvalidierung ist unterschiedlich.

Wenn Sie etwas wollen, eine E-Mail sein, müssen Sie offensichtlich, dass validieren, bevor Sie sie in die Datenbank eingefügt werden.

htmlentities () Daten bereinigt, dh es modify die Daten. Ich glaube, Sie immer Rohdaten in der Datenbank gespeichert werden sollen, und wenn Sie diese Daten greifen, wählen, wie Sie es dann sanieren wollen.

Ich mag die folgende Funktion als "Wrapper" verwenden, für die mysql_real_escape_string () Funktion.

function someFunction( $value )
{
    if ( is_int( $value ) || is_float( $value ) ) {
        return $value;
    }
    return "'" . mysql_real_escape_string( (string) $value ) . "'";
}

Wenn der Wert ein Schwimmer oder eine ganze Zahl, dann gibt es keinen Punkt in Laufe mysql_real_escape_string () . Der Grund, warf ich den Wert in eine Zeichenfolge, bevor es an mysql_real_escape_string () vorbei ist, weil manchmal der Wert vielleicht nicht eine Zeichenfolge sein.

Ein Beispiel für den Wert kein String sein:

http: //localhost/test.php hallo [] = test

Innerhalb test.php, führen Sie mysql_real_escape_string () auf $ _GET [ 'Hallo'] erwartet hallo ein String zu sein. Nun, da die Person, den Wert auf ein Array gesetzt, es wird tatsächlich eine Mitteilung verursachen, da hallo kein String.

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