str_pos php,关于php中str_replace替换漏洞的分析

这篇文章主要介绍了关于php中str_replace替换漏洞的分析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

定义和用法

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.jb51.net/img/offer/29/24/70/20/29247020',

'http://img.jb51.net/img/offer/29/24/70/20/29247020-1',

'http://img.jb51.net/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 = '

29247020

29247020-1

29247020-2';

$data = str_replace($arr1,$arr2,$data);

var_dump($data);

?>

替换后的结果是:

string(169) "af48056fc4.jpgaf48056fc4.jpg-1af48056fc4.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中文网!

相关推荐:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值