>백엔드 개발 >PHP 튜토리얼 >PHP의 str_replace 대체 취약점 분석

PHP의 str_replace 대체 취약점 분석

不言
不言원래의
2018-06-21 14:08:463524검색

이 글은 주로 PHP의 str_replace 대체 취약점에 대한 분석을 소개합니다. 이제 특정 참조 값을 가지고 있습니다. 필요한 친구들이 참고할 수 있습니다.

정의 및 사용법
str_replace() 함수는 문자열 바꾸기를 사용합니다. 문자열의 다른 문자.
구문
str_replace(find,replace,string,count)
매개변수 설명
find 필수. 찾을 값을 지정합니다.
교체가 필요합니다. find의 값을 대체할 값을 지정합니다.
문자열이 필요합니다. 검색할 문자열을 지정합니다.
수는 선택사항입니다. 대체 횟수를 계산하는 변수입니다.
팁 및 메모
참고: 이 기능은 대소문자를 구분합니다. 대소문자를 구분하지 않고 검색하려면 str_ireplace()를 사용하세요.
참고: 이 함수는 바이너리 안전합니다.
예제 1

<?php 
echo str_replace("world","John","Hello world!"); 
?>

출력:

Hello John!

예제 2
이 예에서는 배열 및 개수 변수가 있는 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

Ex 넉넉한 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(  
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020&#39;, 
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020-1&#39;, 
&#39;http://img.jb51.net/img/offer/29/24/70/20/29247020-2&#39; 
); 
$arr2 = Array( 
&#39;http://localhost/root/ups/af48056fc4.jpg&#39;, 
&#39;http://localhost/root/ups/cf33240aa3.jpg&#39;, 
&#39;http://localhost/root/ups/c30e40419b.jpg&#39; 
); 
$data = &#39; 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020"/> 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020-1"/> 
<img src="http://img.jb51.net/img/offer/29/24/70/20/29247020-2"/>&#39;; 
$data = str_replace($arr1,$arr2,$data); 
var_dump($data); 
?>

교체 후 결과는 다음과 같습니다.

string(169) "6eecd69bd3a135945f32ff8c0041348935e6a4c146d6e2e160c1819ac897c18a1503029013d0d09faa51672015c8ca30"str_replace 함수의 선언은 아마도 다음과 같습니다: str_replace($search, $replace, $input[,&$count]), 예를 들어 문자열을 바꿀 때 $input은 소스 문자열(데이터 소스라고 함)입니다. ) 이는 데이터 소스를 세 번째 위치에 두는 반면 str_pos, strtok, str_repeat 및 기타 함수는 모두 첫 번째 위치에 데이터 소스를 두기 때문에 무리합니다. 즉, 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의 filter_var() 함수 및 필터 함수 분석

PHP에서 문자열을 가로채는 몇 가지 방법 요약

위 내용은 PHP의 str_replace 대체 취약점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.