• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> PHP 开发 >> PHP安全 >> 详细内容
 

推荐文章

 
 

热点文章

  • PHP中的加密功能
  • 基于Apache的Web页面访问权限控制
  • php 安全
  • 防范SQL注入攻击的代码
  • 世界上发现首例PHP病毒
  • PHP安全配置(3)
  • php漏洞对策
  • CGI安全漏洞资料速查v1.0(转三)
  • PHP安全配置(2)
  • 脚本安全和利用
  • PHP安全配置(1)
  • PHP安全问题
 
 

相关文章

 
 

百度搜索

 
 

关于str_replace的替换漏洞

  • 阅览次数:
  • 文章来源: im286
  • 原文作者: lrt886
  • 整理日期: 2008-03-18
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

关于str_replace的替换漏洞

相关函数:

<?php

$arr1 = Array(
'http://img.china.alibaba.com/img/offer/29/24/70/20/29247020',
'http://img.china.alibaba.com/img/offer/29/24/70/20/29247020-1',
'http://img.china.alibaba.com/img/offer/29/24/70/20/29247020-2'
);
$arr2 = Array(
'/u/xueyuan_0321/2008-03/18/af48056fc4.jpg',
'/u/xueyuan_0321/2008-03/18/cf33240aa3.jpg',
'/u/xueyuan_0321/2008-03/18/c30e40419b.jpg'
);
$data = '
<img src="http://img.china.alibaba.com/img/offer/29/24/70/20/29247020"/>
<img src="http://img.china.alibaba.com/img/offer/29/24/70/20/29247020-1"/>
<img src="http://img.china.alibaba.com/img/offer/29/24/70/20/29247020-2"/>';
$data = str_replace($arr1,$arr2,$data);
var_dump($data);
?>

替换后的结果是:

string(169) "
<img src="/u/xueyuan_0321/2008-03/18/af48056fc4.jpg"/>
<img src="/u/xueyuan_0321/2008-03/18/af48056fc4.jpg-1"/>
<img src="/u/xueyuan_0321/2008-03/18/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使用zlib扩展实现页面GZIP压缩输出
下一篇:构建支持Master/Slave读写分离的数据库操作类
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号