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 相关文章推荐
自动跳转中英文页面
Oct 09 PHP
在PHP中使用灵巧的体系结构
Oct 09 PHP
PHP 向右侧拉菜单实现代码,测试使用中
Nov 03 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
php数组函数序列之array_push() 数组尾部添加一个或多个元素(入栈),返回新长度。
Nov 07 PHP
PHP可变函数的使用详解
Jun 14 PHP
php网站地图生成类示例
Jan 13 PHP
PHP生成网站桌面快捷方式代码分享
Oct 11 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
Laravel学习教程之IOC容器的介绍与用例
Aug 15 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 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数据库操作面向对象的优点
2006/10/09 PHP
php三元运算符知识汇总
2015/07/02 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
2013/08/21 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
JS动态添加与删除select中的Option对象(示例代码)
2013/12/25 Javascript
9个让JavaScript调试更简单的Console命令
2016/11/14 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
bootstrap是什么_动力节点Java学院整理
2017/07/14 Javascript
解决option标签selected=&quot;selected&quot;属性失效的问题
2017/11/06 Javascript
一秒学会微信小程序制作table表格
2019/02/14 Javascript
JavaScript 截取字符串代码实例
2019/09/05 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
javascript中导出与导入实现模块化管理教程
2020/12/03 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
举例详解Python中循环语句的嵌套使用
2015/05/14 Python
Python字符和字符值(ASCII或Unicode码值)转换方法
2015/05/21 Python
Python实现简单的代理服务器
2015/07/25 Python
python简单分割文件的方法
2015/07/30 Python
深入理解python中的闭包和装饰器
2016/06/12 Python
Python实现感知机(PLA)算法
2017/12/20 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
房地产销售经理岗位职责
2014/01/01 职场文书
关于打架的检讨书
2014/01/17 职场文书
合伙购房协议样本
2014/10/06 职场文书
个人整改措施书面材料
2014/10/24 职场文书
干部培训工作总结2015
2015/05/25 职场文书
城南旧事观后感
2015/06/11 职场文书
运动会新闻稿
2015/07/17 职场文书
spring cloud 配置中心native配置方式
2021/09/25 Java/Android