Maison  >  Article  >  développement back-end  >  Analyse de la vulnérabilité de remplacement str_replace en php

Analyse de la vulnérabilité de remplacement str_replace en php

不言
不言original
2018-06-21 14:08:463520parcourir

Cet article présente principalement l'analyse de la vulnérabilité de remplacement str_replace en php. Il a une certaine valeur de référence. Maintenant, je le partage avec tout le monde. Les amis dans le besoin peuvent s'y référer

Définition et utilisation La fonction str_replace() utilise une chaîne pour remplacer d'autres caractères dans une chaîne.

Syntaxe
str_replace(find,replace,string,count)
Description du paramètre
find Obligatoire. Spécifie la valeur à rechercher.
remplacement requis. Spécifie la valeur pour remplacer la valeur dans find.
chaîne requise. Spécifie la chaîne à rechercher.
compte facultatif. Une variable comptant le nombre de substitutions.

Conseils et notes Remarque : Cette fonction est sensible à la casse. Veuillez utiliser str_ireplace() pour effectuer une recherche insensible à la casse.
Remarque : Cette fonction est sécurisée pour les binaires.

Exemple 1

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


Hello John!

Exemple 2
Dans cet exemple, nous démontrera la fonction str_replace() avec un tableau et une variable count :

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


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

Exemple 3

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


Array 
( 
[0] => B 
[1] => 
[2] => ! 
)
Fonction liée à la vulnérabilité :


<?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); 
?>
Le résultat après remplacement est :

string(169 ) "ca9f966d90e05daff0899c4d2954e51e98157d61a8b0feaf7c39779c0cfb2016 22055c41c405dee0d9f000d721aec15f"La déclaration de la fonction str_replace ressemble probablement à ceci : str_replace($search, $replace, $input[,& $ count]), par exemple, lors du remplacement d'une chaîne, $input est la chaîne source (appelée source de données). Ceci est déraisonnable car cela place la source de données en troisième position, tandis que str_pos, strtok, str_repeat Les autres fonctions sont toutes mises. la source de données en premier lieu. En d'autres termes, str_replace ne remplace pas la chaîne correspondante dans le tableau, mais remplace la première dans le tableau, puis remplace la chaîne redondante après la même fusion.

Solution :


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));
}
Ce qui précède est l'intégralité du contenu de cet article. J'espère qu'il sera utile à l'étude de chacun. Pour plus de contenu connexe, veuillez prêter attention au. Site Web chinois PHP !

Recommandations associées :

Analyse de la fonction filter_var() et de la fonction Filter en PHP

À propos des chaînes d'interception PHP Résumé de quelques méthodes

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn