이 글은 주로 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( '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 = ' <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"/>'; $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의 str_replace 대체 취약점 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!