Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert Code zur Verarbeitung eingegebener Escape-Zeichen

PHP implementiert Code zur Verarbeitung eingegebener Escape-Zeichen

不言
不言Original
2018-06-06 10:59:151954Durchsuche

In diesem Artikel wird hauptsächlich der Code für die Verarbeitung von Eingabe-Escape-Zeichen in PHP vorgestellt. Freunde, die ihn benötigen, können sich darauf beziehen

Nehmen wir zunächst eine Funktion, die erst kürzlich in WordPress 3.6 eingeführt wurde

/**
 * Add slashes to a string or array of strings.
 *
 * This should be used when preparing data for core API that expects slashed data.
 * This should not be used to escape data going directly into an SQL query.
 *
 * @since 3.6.0
 *
 * @param string|array $value String or array of strings to slash.
 * @return string|array Slashed $value
 */
function wp_slash( $value ) {
    if ( is_array( $value ) ) {
        foreach ( $value as $k => $v ) {
            if ( is_array( $v ) ) {
                $value[$k] = wp_slash( $v );
            } else {
                $value[$k] = addslashes( $v );
            }
        }
    } else {
        $value = addslashes( $value );
    }
 
    return $value;
}


Erklären Sie zunächst eine in PHP integrierte Funktion: get_magic_quotes_gpc()

Die Funktion dieser Funktion besteht darin, den Wert der Option magic_quotes_gpc in PHP abzurufen. ini-Einstellung.
Wenn der Wert der Option magic_quotes_gpc On ist, fügt der PHP-Parser automatisch das Escape-Zeichen „“ zu den Daten aus Post, Get und Cookie hinzu, um sicherzustellen, dass diese Daten keine Probleme im Programm verursachen, insbesondere bei Datenbankanweisungen aufgrund eines fatalen Fehlers. Wenn

aktiviert ist, werden Zeichen wie einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslashes () und NUL (NULL-Zeichen) mit Backslashes versehen, andernfalls müssen sie manuell verarbeitet werden. Addslashes()
gibt 1 zurück, wenn der magic_quotes_gpc-Wert „On“ ist, andernfalls gibt es 0 zurück
addslashes()-Funktion fügt einen Backslash vor dem angegebenen vordefinierten Zeichen hinzu, bei dem es sich um das oben aufgeführte Zeichen handelt

Aber die integrierte Funktion get_magic_quotes_gpc() wurde in PHP5.4 und höher abgebrochen. Um Fehler in Zukunft zu vermeiden, werden alle Eingaben wie folgt gefiltert:


if(!function_exists(get_magic_quotes_gpc) || !get_magic_quotes_gpc() )) { 
  foreach(array('_COOKIE', '_POST', '_GET') as $v) { 
    foreach($$v as $kk => $vv) { 
      $kk{0} != '_' && $$v[$kk] = addslashes($vv); 
    } 
  } 
}


Bei der Verarbeitung von MySQL- und GET- und POST-Daten ist es häufig erforderlich, die Anführungszeichen der Daten zu maskieren

Es gibt drei Einstellungen in PHP, die ' (einfache Anführungszeichen) automatisch konvertieren können ), " (doppelte Anführungszeichen). , (Backslash) und NULL-Zeichen werden konvertiert.
PHP nennt es magische Anführungszeichen

magic_quotes_gpc

und wirkt sich auf HTTP-Anfragedaten (GET, POST und COOKIES) aus. Kann zur Laufzeit nicht geändert werden. Der Standardwert in PHP ist on.

Wenn dies aktiviert ist, werden Daten, die über GET, POST und COOKIE übergeben werden, automatisch maskiert.

Zum Beispiel test.php?id=abc'de"f

echo $_GET['id']; # Sie erhalten abc'de"f
magic_quotes_gpc=On; eingeschaltet, rechts Das Schreiben in die Datenbank hat keine Auswirkung. Wenn beispielsweise das obige $_GET['id'] in die Datenbank geschrieben wird, lautet es immer noch abc'de"f,

Im Gegenteil, wenn magic_quotes_gpc=Off; dann werden die Zeichen mit Anführungszeichen (ob einfache Anführungszeichen oder doppelte Anführungszeichen) direkt in MySQL geschrieben

wird abc'de"f sein

magic_quotes_runtime


Wenn aktiviert, werden die meisten Funktionen verwendet, die Daten aus externen Quellen abrufen und zurückgeben, einschließlich Datenbanken und Textdateien , gibt Backslash-Escapezeichen zurück. Diese Option kann zur Laufzeit geändert werden und der Standardwert in PHP ist ausgeschaltet.

magic_quotes_sybase


Wenn diese Option aktiviert ist, werden einfache Anführungszeichen mit einfachen Anführungszeichen anstelle von Backslashes maskiert. Diese Option überschreibt magic_quotes_gpc vollständig. Wenn beide Optionen gleichzeitig aktiviert sind, werden einfache Anführungszeichen in „“ maskiert. Doppelte Anführungszeichen, Backslashes und NULL-Zeichen werden nicht maskiert.

Mein Formularinhalt war ursprünglich: 4f52ed1e5c491ac83ef50b5c9714a38f

d9ce35c4fd9ddae66be8e71cd48345f9

Gegenmaßnahme 1: Ändern Sie die php.ini-Datei (ich werde nicht auf die Methode zum Ändern von php.ini eingehen, Sie können googeln it Next)

Gegenmaßnahme 2: Brechen Sie das Escape ab

Schritt 1: Suchen Sie die von Ihnen übermittelten Daten, z. B. $_POST['content'], und ändern Sie sie in $content=stripslashes ($_POST ['content']);

Schritt 2: Ersetzen Sie in Zukunft $POST['content'] durch $content

Schritt 3: An die Datenbank senden, der Datenbankspeicher ist noch vorhanden normal: 4f52ed1e5c491ac83ef50b5c9714a38f vorgelesen als

1cbf851d5729038d483c8b5f4fd864b0 (Sie sollten wissen, wie man das löst, oder? Wie wäre es, wenn ich noch mehr hinzufüge?)

Schritt 4: Verwenden Sie Stripslashes(), um den aus der Datenbank gelesenen Inhalt zu filtern.

Stripslashes() Diese Funktion entfernt den von der Addslashes()-Funktion hinzugefügten Backslash aus der Datenbank oder dem HTML-Formular

(

Wenn Sie nicht möchten, dass die folgende Situation auf der PHP-Seite auftritt:

Das einfache Anführungszeichen wird mit Escapezeichen versehen als '

Doppelte Anführungszeichen sind maskiert als „
Dann können die folgenden Einstellungen vorgenommen werden, um dies zu verhindern:
Eingestellt in php.ini: magic_quotes_gpc = Off)

Zusammenfassung wie folgt:

1. Im Fall von magic_quotes_gpc=on

, können wir keine

addslashes()- und striplashes()-Operationen für die Zeichenfolgendateneingabe und -ausgabe aus der Datenbank ausführen, und die Daten werden normal angezeigt .


Wenn Sie zu diesem Zeitpunkt addslashes() für die Eingabedaten ausführen,

dann müssen Sie stripeslashes() verwenden, um überschüssige Backslashes bei der Ausgabe zu entfernen.


2. Für den Fall magic_quotes_gpc=off

Sie müssen addslashes() verwenden, um die Eingabedaten zu verarbeiten, aber Sie müssen Stripslashes() nicht verwenden, um die Ausgabe zu formatieren.
Da addslashes() die Backslashes nicht zusammen in die Datenbank schreibt, hilft es nur MySQL Schließen Sie die Ausführung der SQL-Anweisung ab.

Verwandte Empfehlungen:

PHP fügt einen Backslash vor dem Anführungszeichen hinzu (PHP entfernt den Backslash)



Das obige ist der detaillierte Inhalt vonPHP implementiert Code zur Verarbeitung eingegebener Escape-Zeichen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn