Heim  >  Artikel  >  Backend-Entwicklung  >  Analyse der Sicherheitslücke str_replace in PHP

Analyse der Sicherheitslücke str_replace in PHP

不言
不言Original
2018-06-21 14:08:463496Durchsuche

Dieser Artikel stellt hauptsächlich die Analyse der str_replace-Ersatzschwachstelle in PHP vor. Er hat einen gewissen Referenzwert. Jetzt kann ich ihn mit allen teilen.

Definition und Verwendung > str_replace()-Funktion verwendet eine Zeichenfolge, um andere Zeichen in einer Zeichenfolge zu ersetzen.

Syntax
str_replace(find,replace,string,count)
Parameterbeschreibung
find Erforderlich. Gibt den Wert an, nach dem gesucht werden soll.
Austausch erforderlich. Gibt den Wert an, der den Wert in „find“ ersetzen soll.
Zeichenfolge erforderlich. Gibt die Zeichenfolge an, nach der gesucht werden soll.
Zählung optional. Eine Variable, die die Anzahl der Ersetzungen zählt.

Tipps und Hinweise Hinweis: Bei dieser Funktion muss die Groß-/Kleinschreibung beachtet werden. Bitte verwenden Sie str_ireplace(), um eine Suche ohne Berücksichtigung der Groß- und Kleinschreibung durchzuführen.
Hinweis: Diese Funktion ist binärsicher.

Beispiel 1

<?php 
echo str_replace("world","John","Hello world!"); 
?>

Ausgabe:


Hello John!

Beispiel 2
In diesem Beispiel werden wir str_replace( ) Funktion mit Array- und Zählvariablen:

<?php 
$arr = array("blue","red","green","yellow"); 
print_r(str_replace("red","pink",$arr,$i)); 
echo "Replacements: $i"; 
?>

Ausgabe:


Array 
( 
[0] => blue 
[1] => pink 
[2] => green 
[3] => yellow 
) 
Replacements: 1

Beispiel 3

<?php 
$find = array("Hello","world"); 
$replace = array("B"); 
$arr = array("Hello","world","!"); 
print_r(str_replace($find,$replace,$arr)); 
?>

Ausgabe:


Array 
( 
[0] => B 
[1] => 
[2] => ! 
)

Sicherheitslückenbezogene Funktionen:


<?php 
$arr1 = Array(  
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020&#39;, 
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020-1&#39;, 
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020-2&#39; 
); 
$arr2 = Array( 
&#39;http://localhost/root/ups/af48056fc4.jpg&#39;, 
&#39;http://localhost/root/ups/cf33240aa3.jpg&#39;, 
&#39;http://localhost/root/ups/c30e40419b.jpg&#39; 
); 
$data = &#39; 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020"/> 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020-1"/> 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020-2"/>&#39;; 
$data = str_replace($arr1,$arr2,$data); 
var_dump($data); 
?>

Das Ergebnis nach dem Ersetzen ist:

string(169) "b1c2bc80759e70d9695754231a71d09835e6a4c146d6e2e160c1819ac897c18a2d292934d310b52a2d65bab200b50886"Die Deklaration der Funktion str_replace sieht wahrscheinlich so aus: str_replace($search, $replace, $input[,&$count]), zum Beispiel beim Ersetzen einer Zeichenfolge, $input ist die Quellzeichenfolge (genannt Datenquelle). Dies ist sehr unvernünftig, da dadurch die Datenquelle an die dritte Position gesetzt wird, während str_pos, strtok, str_repeat und andere Funktionen die Datenquelle an die erste Position bringen. str_replace ersetzt nicht die entsprechende Zeichenfolge im Array, sondern die erste im Array und führt dann die verbleibenden Zeichenfolgen mit derselben Zeichenfolge zusammen.

Lösung:


function strrplace($arr1,$arr2,$data){ 
if(is_array($arr1)) {  
foreach($arr1 as $key => $value)  {
   $data = str_replace_once($value, $arr2[$key], $data);
  } } 
return $data;
}
function str_replace_once($needle, $replace, $data) //替换第一次
{
$pos = strpos($data, $needle);
if ($pos === false) {
return $data; 
}
return substr_replace($data, $replace, $pos, strlen($needle));
}

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er wird für das Lernen aller hilfreich sein. Achten Sie bitte auf PHP-Chinesisch Webseite!

Verwandte Empfehlungen:

Analyse der Funktion filter_var() und der Filterfunktion in PHP

Über PHP-Abfangzeichenfolgen Zusammenfassung von einige Methoden

Das obige ist der detaillierte Inhalt vonAnalyse der Sicherheitslücke str_replace in PHP. 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