php str_replace的替换漏洞


Posted in PHP onMarch 15, 2008

定义和用法
str_replace() 函数使用一个字符串替换字符串中的另一些字符。

语法
str_replace(find,replace,string,count)

参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。一个变量,对替换数进行计数。

提示和注释
注释:该函数对大小写敏感。请使用 str_ireplace() 执行对大小写不敏感的搜索。

注释:该函数是二进制安全的。

例子 1

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

输出:

Hello John!

例子 2
在本例中,我们将演示带有数组和 count 变量的 str_replace() 函数:

<?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

例子 3

<?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.3water.com/img/offer/29/24/70/20/29247020',
'http://img.3water.com/img/offer/29/24/70/20/29247020-1',
'http://img.3water.com/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.3water.com/img/offer/29/24/70/20/29247020"/>
<img src="http://img.3water.com/img/offer/29/24/70/20/29247020-1"/>
<img src="http://img.3water.com/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));

PHP 相关文章推荐
如何利用php+mysql保存和输出文件
Oct 09 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
php在项目中寻找代码的坏味道(综艺命名)
Jul 19 PHP
解析PHP中ob_start()函数的用法
Jun 24 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
php提交post数组参数实例分析
Dec 17 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
php求今天、昨天、明天时间戳的简单实现方法
Jul 28 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
php操作redis数据库常见方法实例总结
Feb 20 PHP
PhpStorm+xdebug+postman调试技巧分享
Sep 15 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
PHP执行速率优化技巧小结
Mar 15 #PHP
请php正则走开
Mar 15 #PHP
可以在线执行PHP代码包装修正版
Mar 15 #PHP
PHP Token(令牌)设计
Mar 15 #PHP
php项目打包方法
Feb 18 #PHP
PHP4与PHP5的时间格式问题
Feb 17 #PHP
PHP5 面向对象程序设计
Feb 13 #PHP
You might like
多人战的战术与战略
2020/03/04 星际争霸
漫威DC御用漫画家去世 他的表情包曾走红网络
2020/04/09 欧美动漫
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
Yii2中DropDownList简单用法示例
2016/07/18 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
php基于websocket搭建简易聊天室实践
2016/10/24 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
通过jQuery打造支持汉字,拼音,英文快速定位查询的超级select插件
2010/06/18 Javascript
JQuery最佳实践之精妙的自定义事件
2010/08/11 Javascript
JQuery实现展开关闭层的方法
2015/02/17 Javascript
JS实现网页标题随机显示名人名言的方法
2015/11/03 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
Python命令行解析模块详解
2018/02/01 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
python实现超市扫码仪计费
2018/05/30 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
用HTML5制作一个简单的桌球游戏的教程
2015/05/12 HTML / CSS
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
岗位职责定义及内容
2013/11/08 职场文书
销售演讲稿范文
2014/01/08 职场文书
2014年质检员工作总结
2014/11/18 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
SpringCloud中分析讲解Feign组件添加请求头有哪些坑梳理
2022/06/21 Java/Android
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技