源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

php str_replace的替换漏洞

  • 时间:2021-12-09 01:35 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:php str_replace的替换漏洞
[b]定义和用法[/b] str_replace() 函数使用一个字符串替换字符串中的另一些字符。 [b]语法 [/b]str_replace(find,replace,string,count) 参数 描述 find 必需。规定要查找的值。 replace 必需。规定替换 find 中的值的值。 string 必需。规定被搜索的字符串。 count 可选。一个变量,对替换数进行计数。 [b]提示和注释[/b] 注释:该函数对大小写敏感。请使用 str_ireplace() 执行对大小写不敏感的搜索。 注释:该函数是二进制安全的。 [b]例子 1 [/b]
[u]复制代码[/u] 代码如下:
<?php echo str_replace("world","John","Hello world!"); ?>
输出: Hello John! [b]例子 2 [/b]在本例中,我们将演示带有数组和 count 变量的 str_replace() 函数:
[u]复制代码[/u] 代码如下:
<?php $arr = array("blue","red","green","yellow"); print_r(str_replace("red","pink",$arr,$i)); echo "Replacements: $i"; ?>
输出: Array ( [0] => blue [1] => pink [2] => green [3] => yellow ) Replacements: 1 [b]例子 3 [/b]
[u]复制代码[/u] 代码如下:
<?php $find = array("Hello","world"); $replace = array("B"); $arr = array("Hello","world","!"); print_r(str_replace($find,$replace,$arr)); ?>
输出: Array ( [0] => B [1] => [2] => ! ) 漏洞相关函数: <?php $arr1 = Array(  'http://img.jb51.net/img/offer/29/24/70/20/29247020', 'http://img.jb51.net/img/offer/29/24/70/20/29247020-1', 'http://img.jb51.net/img/offer/29/24/70/20/29247020-2' ); $arr2 = Array( 'http://localhost/root/ups/af48056fc4.jpg', 'http://localhost/root/ups/cf33240aa3.jpg', 'http://localhost/root/ups/c30e40419b.jpg' ); $data = ' <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"/>'; $data = str_replace($arr1,$arr2,$data); var_dump($data); ?> 替换后的结果是: string(169) "<img src="http://localhost/root/ups/af48056fc4.jpg"/><img src="http://localhost/root/ups/af48056fc4.jpg-1"/><img src="http://localhost/root/ups/af48056fc4.jpg-2"/>"str_replace 函数的声明大概是这样: str_replace($search, $replace, $input[,&$count]), 比如在对一个字符串进行替换操作, $input 就是源字符串(称为数据源). 这很不合理,因为它把数据源放在第3位, 而 str_pos, strtok, str_repeat 等等函数都是把数据源放在第1位.也就是说str_replace并没有替换掉数组中相对应的字符串,而是把数组中的第一个替换,然后把相同的字符串后多余的合并。 解决办法: 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)); } 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部