Heim >Backend-Entwicklung >PHP-Tutorial >So führen Sie eine Zeichenfilterung in PHP durch

So führen Sie eine Zeichenfilterung in PHP durch

WBOY
WBOYOriginal
2016-08-08 09:33:252264Durchsuche

So filtern Sie Zeichen in PHP

Die Konfigurationen und Funktionen im Zusammenhang mit dem PHP-String-Escape sind wie folgt:
1.magic_quotes_runtime
2.magic_quotes_gpc
3.addslashes() und striplashes()
4.mysql_escape_string()
5.addcslashes() und stripcslashes()
6.htmlentities() und html_entity_decode()
7.htmlspecialchars() und htmlspecialchars_decode()

Wenn magic_quotes_runtime aktiviert ist, fügen die meisten PHP-Funktionen automatisch Backslashes zu Überlaufzeichen in von außen importierten Daten (einschließlich Datenbanken oder Dateien) hinzu.
Sie können set_magic_quotes_runtime() und get_magic_quotes_runtime() verwenden, um seinen Status festzulegen und zu erkennen.
Hinweis: Diese beiden Funktionen sind in PHP 5.3.0 oder höher veraltet, was bedeutet, dass diese Option in PHP 5.3.0 oder höher deaktiviert ist.
?
magic_quotes_gpc legt fest, ob bestimmte Zeichen in den von GPC übertragenen Daten (GET, POST, COOKIE) automatisch maskiert werden sollen,
Seine Einstellung kann mit get_magic_quotes_gpc() ermittelt werden.
Wenn diese Einstellung nicht aktiviert ist, können Sie die Funktion addslashes() verwenden, um der Zeichenfolge
als Escapezeichen hinzuzufügen
addslashes()? Fügt einen Backslash vor den angegebenen vordefinierten Zeichen hinzu.
Zu den vordefinierten Zeichen gehören einfache Anführungszeichen ('), doppelte Anführungszeichen ("), Backslash () und NUL (NULL-Zeichen).
Das Obige ist die Erklärung von W3SCHOOL.COM.CN. Ich hatte immer das Gefühl, dass sie nicht sehr genau ist
Denn wenn magic_quotes_sybase=on ist, werden einfache Anführungszeichen (') in doppelte Anführungszeichen (") umgewandelt. Wenn magic_quotes_sybase=off ist, werden einfache Anführungszeichen (') in (') umgewandelt
Die Funktion der Funktion „stripslashes()“ ist genau das Gegenteil von „addslashes()?“, ihre Funktion besteht darin, den Escape-Effekt zu entfernen.

mysql_escape_string() maskiert Sonderzeichen in Zeichenfolgen, die in SQL-Anweisungen verwendet werden. ?
Zu den besonderen gehören hier (x00), (n), (r), (), ( '), ("), (x1a)

addcslashes()? verwendet Backslashes, um Zeichen in einer Zeichenfolge im C-Sprachstil zu maskieren. Diese Funktion wird von Menschen selten verwendet, es sollte jedoch beachtet werden, dass bei der Auswahl der Zeichen 0, a, b, f, n, r, t und v Wenn sie maskiert sind, werden sie konvertiert
htmlentities() Konvertiert Zeichen in HTML-Entitäten. (Was ist eine HTML-Entität? Googeln Sie sie selbst~~)
Spezifische Parameter finden Sie hier. Die Umkehrfunktion html_entity_decode() -? konvertiert HTML-Entitäten in Zeichen.

Die Funktion htmlspecialchars() konvertiert einige vordefinierte Zeichen in HTML-Entitäten.
Diese vordefinierten Zeichen sind:
& (kaufmännisches Und) wird zu &
„ (doppeltes Anführungszeichen) wird zu „
' (einfaches Anführungszeichen) wird zu '
< (kleiner als) wird zu
> (größer als) wird zu
?Detaillierte Parameter finden Sie hier. Die Umkehrfunktion ist htmlspecialchars_decode(), um einige vordefinierte HTML-Entitäten in Zeichen umzuwandeln.

Ein kleiner Teil meiner eigenen Erfahrung:
>>Mehrere einfache Escape-Anführungszeichen können zu Datenbanksicherheitsproblemen führen
>> Es wird nicht empfohlen, mysql_escape_string zum Escapen zu verwenden. Es wird empfohlen, beim Erhalten von Benutzereingaben zu maskieren >> Da set_magic_quotes_runtime() in PHP5.3.0 und späteren Versionen aufgegeben wurde, wird empfohlen, es in einer einheitlichen Konfiguration für frühere Versionen zu deaktivieren:



Code kopieren

Der Code lautet wie folgt:

if(phpversion() < '5.3.0') {

set_magic_quotes_runtime(0);
}

?>> Magic_quotes_gpc kann nicht über eine Funktion definiert werden, daher wird empfohlen, es einheitlich auf dem Server zu aktivieren. Sie sollten beim Schreiben eines Programms eine Entscheidung treffen, um Sicherheitsprobleme zu vermeiden, die dadurch entstehen, dass GPC nicht geöffnet wird Beim Escapen von GPC durch Addslashes sollte darauf geachtet werden, Schlüsselwerte und Werte zu filtern, wenn Benutzer Array-Daten übermitteln


Code kopieren
Der Code lautet wie folgt:

if(!get_magic_quotes_gpc()) {

$_GET = dadslashes($_GET); $_POST = dadslashes($_POST); $_COOKIE = dadslashes($_COOKIE);

$_FILES = dadslashes($_FILES); }
Funktion daddslashes($string, $force = 1) {
if(is_array($string)) {
foreach($string as $key => $val) {
unset($string[$key]);
$string[addslashes($key)] = dadslashes($val, $force); }
} else {
$string = addslashes($string); }
return $string;
}

?>> Verwenden Sie Escape-HTML-Entitäten bei der Benutzereingabe oder -ausgabe, um XSS-Schwachstellen zu verhindern!

Heute bin ich auf ein Problem im Zusammenhang mit Sonderzeichen in Dateien gestoßen, und dieses Problem ist mir erneut in PHP aufgefallen:

* PHP-String mit einfachen Anführungszeichen als Trennzeichen, unterstützt zwei Escapezeichen ' und \
* Durch doppelte Anführungszeichen getrennte PHP-Zeichenfolgen unterstützen die folgenden Escapezeichen:
n Zeilenvorschub (LF- oder ASCII-Zeichen 0x0A (10))
r Wagenrücklauf (CR- oder ASCII-Zeichen 0x0D (13))
t Horizontales Tabulatorzeichen (HT- oder ASCII-Zeichen 0x09 (9))
\ Backslash
$-Dollar-Zeichen
" " Doppelte Anführungszeichen
[0-7]{1,3} Diese reguläre Ausdruckssequenz entspricht einem Zeichen, das in der Oktalschreibweise
dargestellt wird x[0-9A-Fa-f]{1,2} Diese reguläre Ausdruckssequenz entspricht einem Zeichen, das in hexadezimaler Schreibweise
dargestellt wird
Hier ein paar Beispiele:

einer enthält
$str = "ffff echo(strlen($str));
echo("n");
for($i=0;$i
Ausgabeergebnis:
---------

9
102 102 102 102 0 102 102 102 102

Beispiel für das Ersetzen von Sonderzeichen

$str = "ffff $str = str_replace("x0", "", $str); //Oder verwenden Sie $str = str_replace(" //Oder verwenden Sie $str = str_replace(chr(0), "", $str); echo(strlen($str));
echo("n");
for($i=0;$i Ausgabeergebnis:
---------
8
102 102 102 102 102 102 102 102


Beispiel für einen oktalen ASCII-Code:

//Beachten Sie, dass eine Zeichenfolge, die dem regulären Muster [0-7]{1,3} entspricht, einen oktalen ASCII-Code darstellt.
$str = " echo(strlen($str));
echo("n");
for($i=0;$i Ausgabeergebnis:
---------
11
0 1 2 3 7 8 9 0 0 56 92 56

Beispiel für einen hexadezimalen ASCII-Code:

$str = "x0x1x2x3x7x8x9x10x11xff"; echo(strlen($str));
echo("n");
for($i=0;$i Ausgabeergebnis:

Das Obige stellt vor, wie man die Zeichenfilterung in PHP durchführt, einschließlich des Inhalts der PHP-Zeichenfilterung. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.


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