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 相关文章推荐
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 PHP
解析CodeIgniter自定义配置文件
Jun 18 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
php实现在线生成条形码示例分享(条形码生成器)
Dec 30 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
在win系统安装配置 Memcached for PHP 5.3 图文教程
Mar 03 PHP
Codeigniter发送邮件的方法
Mar 19 PHP
PHP常用的三种设计模式
Feb 17 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
解决php扩展安装不生效问题
Oct 25 PHP
php使用event扩展的io复用测试的示例
Oct 20 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和ACCESS写聊天室(七)
2006/10/09 PHP
利用PHP+JS实现搜索自动提示(实例)
2013/06/09 PHP
Ubuntu上安装yaf扩展的方法
2018/01/29 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
WordPress 插件——CoolCode使用方法与下载
2007/07/02 Javascript
prettify 代码高亮着色器google出品
2010/12/28 Javascript
js获取RadioButtonList的Value/Text及选中值等信息实现代码
2013/03/05 Javascript
JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例
2016/01/26 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
JS字符串常用操作方法实例小结
2019/06/24 Javascript
微信小程序HTTP接口请求封装代码实例
2019/09/05 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
Vue组件化开发之通用型弹出框的实现
2020/02/28 Javascript
es6中new.target的作用和使用场景简单示例分析
2020/03/14 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
python列表的增删改查实例代码
2018/01/30 Python
解决python3读取Python2存储的pickle文件问题
2018/10/25 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
对django中foreignkey的简单使用详解
2019/07/28 Python
python实现证件照换底功能
2019/08/20 Python
Python如何在单元测试中给对象打补丁
2020/08/03 Python
法国面料和小百货在线商店:Mondial Tissus
2019/03/23 全球购物
Bose英国官方网站:美国知名音响品牌
2020/01/26 全球购物
大学生村官任职感言
2014/01/09 职场文书
岗位职责的构建方法
2014/02/01 职场文书
专题民主生活会对照检查材料思想汇报
2014/09/29 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
余世维讲座观后感
2015/06/11 职场文书
2015年教师节新闻稿
2015/07/17 职场文书
大学学生会竞选稿
2015/11/19 职场文书
A22国内电台短波广播频率表
2022/05/10 无线电