2012-12-13 17 views
5

Mögliche Duplizieren:
Using stripslashes after mysql_real_escape_stringWas ist stripslashes für?

Ich habe vor kurzem über die Prävention von SQL-Injection gelesen und ich versuche, ein Gefühl von Verständnis zwischen den verschiedenen Funktionen zu entwickeln, damit ich lernen kann die Grundlagen.

Ich habe über mysql_real_escape_string gelesen und ich verstehe, dass es im Grunde entkommen Zeichen, die es für "speziell" hält, so dass es nicht für SQL-Syntax verwechselt wird?

Nun vorausgesetzt, dass es zumindest zu einem gewissen Grad wahr ist - gibt es eine Notwendigkeit, die stripslashes Funktion kombiniert mit der mysql_real_escape_string zu verwenden? Ich frage mich, was stripslashes ist und wofür es ist.

+1

Diese Funktion heißt [stripslashes] (http://php.net/manual/fr/function.stripslashes.php). Und ja, die Nützlichkeit von mysql_real_escape_string ist "real". Und nein, Sie sollten es nicht mit mysql_real_escape_string verwenden müssen. – zneak

+1

Ja, tut mir leid, dass ich falsch geschrieben habe - danke, dass du es aufgezeigt hast. – user1868565

+0

Ich kann in der PHP-Dokumentation keine 'striphashes'-Funktion finden. Meinst du stripslashes? Außerdem wird mysql_real_escape_string verwendet, um alles zu entschlüsseln, was möglicherweise SQL ist, so dass es nicht mehr SQL ist. Das Szenario lautet: Sie erhalten String-Daten von einem Benutzer; Sie möchten diese Daten in einer SQL-Anweisung verwenden; Die Verwendung von mysql_real_escape_string stellt sicher, dass der Benutzer SQL nicht in seine Daten einfügen kann. AKA, [SQL-Injektion] (https://en.wikipedia.org/wiki/SQL_injection) Prävention. –

Antwort

11

Wenn Sie stripslashes am Eingang direkt nach der Verwendung mysql_real_escape_string verwenden, werden Sie es effektiv rückgängig machen. Es gibt wahrscheinlich andere Gründe, stripslashes zu verwenden, aber in meinem Fall habe ich es immer nur gebraucht, um den Horror, der magische Zitate ist, rückgängig zu machen. Es ist eigentlich das Gegenteil von addslashes.

addslashes tut nicht unbedingt Flucht Eingabe die gleichen wie mysql_real_escape_string der Fall ist, und sie können nicht für den gleichen Zweck verwendet werden.

Noch besser als mysql_*, sollten Sie sich auf die Verwendung von vorbereiteten Anweisungen wie in PDO lesen. Dann müssen Sie sich nicht einmal Gedanken über mysql_* oder stripslashes machen (außer für magische Zitate).

+0

Danke Ich denke, ich verstehe es jetzt, wird als Antwort gewählt, wenn ich kann. – user1868565

+0

Sie können nicht viel über [richtiges SQL-Escaping] lernen (http://bobby-tables.com/php). – tadman

+0

Ich möchte darauf hinweisen, dass einige (alle?) Implementierungen von 'mysql_real_escape_string' escapen, indem sie sie verdoppeln:' mysql_real_escape_string ("do not") 'gibt' 'don''t' 'zurück, also' stripslashes ' 'wird es nicht rückgängig machen. Es ist jedoch immer noch nicht produktiv, 'stripslashes' auf der Ausgabe von' mysql_real_escape_string' zu nennen. Erwarten Sie jedoch nicht, dass der ursprüngliche Zustand der Zeichenfolge wiederhergestellt wird. – zneak

3

Die Funktion stripslashes() löscht Zeichen, die mit einem Backslash, \, ausgeblendet sind. Es wird häufig für Strings verwendet, die über addslashes() maskiert werden, oder wenn Ihre PHP-Konfiguration magic_quotes aktiviert hat.

Bei Verwendung von SQL-Escaping-Funktionen wie mysql_real_escape_string() ist keine Verwendung von stripslashes() erforderlich, da der MySQL-Adapter nur beim Einfügen in die Datenbank die Werte verdeckt - die Schrägstriche bleiben nicht in den tatsächlichen Werten. Wenn Sie stripslashes() für eine Variable verwenden, die bereits mit mysql_real_escape_string() ausgeblendet wurde, werden die Schrägstriche entfernt, so als ob sie unter Verwendung von addslashes() maskiert wären - ziemlich sinnlos.

Wenn Ihr Ziel ist, SQL-Injection zu verhindern, würde ich sehr empfehlen, in MySQLi oder PDO im Gegensatz zu den älteren mysql_ Methoden zu suchen. Sowohl MySQLi als auch PDO bieten vorbereitete Anweisungen, die bei richtiger Verwendung SQL-Injection verhindern, ohne dass Sie sich daran erinnern müssen, spezielle Escapefunktionen aufzurufen (oder), wenn Ihre Daten von ihnen geändert werden.

-1

strip Funktion für Un-quotes a quoted string

Beispiel verwendet wird:

<?php 
echo stripslashes("how\'s going on?"); 
?> 

Der Ausgang des Code wird oben sein:

how's going on? 

Für weitere Informationen:

http://php.net/manual/en/function.stripslashes.php

+1

Stripslashes hebt einen String in Anführungszeichen nicht auf. Das klingt ziemlich falsch in meinen Ohren. Auch Ihr Beispiel ist nicht von großem Nutzen. – hakre

+0

@hakre um fair zu sein, dies ist genau die Art, wie es im PHP-Handbuch beschrieben wird. – Martin

+0

@Martin: Sie sind richtig, im Jahr 2012 mein Verständnis der Zitate war wahrscheinlich begrenzt, Englisch ist nicht meine Muttersprache. – hakre

0

Check-out

http://php.net/manual/en/language.types.string.php
http://php.net/manual/en/function.stripslashes.php
http://php.net/manual/en/mysqli.real-escape-string.php

Die Escape-Funktionen Schrägstriche hinzufügen '\' Zeichen zu entkommen, die gültige Abfrage STRINGS verwendet werden kann, beenden (nicht die Abfrage selbst) Injektion zu verhindern. Die stripslashes-Funktion wird zum Entfernen dieser Schrägstriche verwendet, sie werden jedoch beim Erstellen von Abfragezeichenfolgen praktisch nicht verwendet, da sie die erforderlichen Schrägstriche entfernen.

Die Ergebnisse von MySQL werden nicht 'durchgestrichen' (maskiert), daher wird es nicht benötigt, wenn mit Ergebnissen gearbeitet wird.