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扩展
Mar 12 PHP
PHP中运用jQuery的Ajax跨域调用实现代码
Feb 21 PHP
php过滤敏感词的示例
Mar 31 PHP
Yii结合CKEditor实现图片上传功能
Jun 13 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
php面向对象中static静态属性与方法的内存位置分析
Feb 08 PHP
两款万能的php分页类
Nov 12 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
php抽奖概率算法(刮刮卡,大转盘)
Apr 17 PHP
php进程间通讯实例分析
Jul 11 PHP
php + nginx项目中的权限详解
May 23 PHP
PHP观察者模式示例【Laravel框架中有用到】
Jun 15 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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
php面向对象全攻略 (五) 封装性
2009/09/30 PHP
PHP冒泡排序算法代码详细解读
2011/07/17 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php商品对比功能代码分享
2015/09/24 PHP
详解PHP对象的串行化与反串行化
2016/01/24 PHP
PHP实现加密文本文件并限制特定页面的存取的效果
2016/10/21 PHP
jquery ajax 检测用户注册时用户名是否存在
2009/11/03 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
python实现dnspod自动更新dns解析的方法
2014/02/14 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
python3 面向对象__类的内置属性与方法的实例代码
2018/11/09 Python
python通过paramiko复制远程文件及文件目录到本地
2019/04/30 Python
Python 读取用户指令和格式化打印实现解析
2019/09/02 Python
python logging 日志的级别调整方式
2020/02/21 Python
jupyter notebook 的工作空间设置操作
2020/04/20 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
利用Python如何画一颗心、小人发射爱心
2021/02/21 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
德国旅行、体验和活动的预订平台:Watado
2019/12/04 全球购物
写一个用矩形法求定积分的通用函数
2012/11/08 面试题
JavaScript实现前端网页版倒计时
2021/03/24 Javascript
中英文求职信范文
2014/01/27 职场文书
毕业证丢失证明范本
2014/09/20 职场文书
向国旗敬礼学生寄语大全
2014/09/30 职场文书
2015年党建工作总结
2015/03/30 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
个人向公司借款协议书
2016/03/19 职场文书
自荐信大全
2019/03/21 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
mysql查询结果实现多列拼接查询
2022/04/03 MySQL
ipad隐藏软件app图标方法
2022/04/19 数码科技