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 相关文章推荐
特详细的PHPMYADMIN简明安装教程
Aug 01 PHP
用PHP+MySQL搭建聊天室功能实例代码
Aug 20 PHP
ThinkPHP之N方法实例详解
Jun 20 PHP
PHP使用GIFEncoder类生成gif动态滚动字幕
Jul 01 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP扩展程序实现守护进程
Apr 16 PHP
PHP实现的简单网络硬盘
Jul 29 PHP
基于PHP实现用户注册登录功能
Oct 14 PHP
PHP单态模式简单用法示例
Nov 16 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 PHP
laravel ajax curd 搜索登录判断功能的实现
Apr 17 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
php学习笔记 数组遍历实现代码
2011/06/09 PHP
PHP转换文件夹下所有文件编码的实现代码
2013/06/06 PHP
YII框架关联查询操作示例
2019/04/29 PHP
js显示时间 js显示最后修改时间
2013/01/02 Javascript
js实现简单的购物车有图有代码
2014/05/26 Javascript
js根据鼠标移动速度背景图片自动旋转的方法
2015/02/28 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
NodeJS遍历文件生产文件列表功能示例
2017/01/22 NodeJs
React进阶学习之组件的解耦之道
2017/08/07 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
基于Vue实现关键词实时搜索高亮显示关键词
2018/07/21 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
原生JS实现的放大镜特效示例【测试可用】
2018/12/08 Javascript
详解JS浏览器事件循环机制
2019/03/27 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
bootstrap table插件动态加载表头
2019/07/19 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
Python实现自定义顺序、排列写入数据到Excel的方法
2018/04/23 Python
Ubuntu下升级 python3.7.1流程备忘(推荐)
2018/12/10 Python
Python面向对象之类和实例用法分析
2019/06/08 Python
pytorch打印网络结构的实例
2019/08/19 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
pytorch 模拟关系拟合——回归实例
2020/01/14 Python
Selenium Webdriver元素定位的八种常用方式(小结)
2021/01/13 Python
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
工作个人的自我评价
2014/01/14 职场文书
先进个人获奖感言
2014/01/24 职场文书
演讲稿的写法
2014/05/19 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python