找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 397|回复: 0
打印 上一主题 下一主题

php str_replace的替换漏洞

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2018-2-14 09:24:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

            定义和用法
str_replace() 函数使用一个字符串替换字符串中的另一些字符。
语法
str_replace(find,replace,string,count)
参数 描述
find 必需。规定要查找的值。
replace 必需。规定替换 find 中的值的值。
string 必需。规定被搜索的字符串。
count 可选。一个变量,对替换数进行计数。
提示和注释
注释:该函数对大小写敏感。请使用 str_ireplace() 执行对大小写不敏感的搜索。
注释:该函数是二进制安全的。
例子 1
[U]复制代码[/U] 代码如下:


输出:
Hello John!
例子 2
在本例中,我们将演示带有数组和 count 变量的 str_replace() 函数:
[U]复制代码[/U] 代码如下:


输出:
Array
(
[0] => blue
[1] => pink
[2] => green
[3] => yellow
)
Replacements: 1
例子 3
[U]复制代码[/U] 代码如下:


输出:
Array
(
[0] => B
[1] =>
[2] => !
)
漏洞相关函数:

替换后的结果是:
string(169) "



"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防注入漏洞过滤函数代码
  • PHP漏洞全解(详细介绍)
  • php中sql注入漏洞示例 sql注入漏洞修复
  • ThinkPHP框架任意代码执行漏洞的利用及其修复方法
  • 在PHP中使用FastCGI解析漏洞及修复方案
  • fastcgi文件读取漏洞之python扫描脚本
  • PHP-CGI远程代码执行漏洞分析与防范
            
  • 分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    用户反馈
    客户端