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

不言
Libérer: 2023-04-01 16:34:01
original
3417 Les gens l'ont consulté

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!"); 
?>
Copier après la connexion
Sortie :


Hello John!
Copier après la connexion

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"; 
?>
Copier après la connexion
Sortie :


Array 
( 
[0] => blue 
[1] => pink 
[2] => green 
[3] => yellow 
) 
Replacements: 1
Copier après la connexion

Exemple 3

<?php 
$find = array("Hello","world"); 
$replace = array("B"); 
$arr = array("Hello","world","!"); 
print_r(str_replace($find,$replace,$arr)); 
?>
Copier après la connexion
Sortie :


Array 
( 
[0] => B 
[1] => 
[2] => ! 
)
Copier après la connexion
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); 
?>
Copier après la connexion
Le résultat après remplacement est :

string(169 ) " "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));
}
Copier après la connexion
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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!