[웹 보안] 변수 덮어 쓰기 구멍

3247 단어 웹 보안
전역 변수 덮어 쓰기
등록global = ON 일 때 변수 출처 는 페이지 의 폼, Cookie 등 다양한 곳 일 수 있 습 니 다.
";

if ($auth){
   echo "private!";
}
?>
registerglobals = OFF 시 이 코드 는 문제 가 되 지 않 습 니 다.
하지만 registerglobals = ON 시 요청 URL 제출:http://www.a.com/test.php?auth=1, 변수 $auth 는 자동 으로 할당 을 받 습 니 다.얻 은 결 과 는?
Register_globals:1
private!
메모: 위의 코드 에 $auth 에 초기 값 을 부 여 했 습 니 다. 예 를 들 어 $auth = 0 이 있 으 면 URL 에 / test. php? auth = 1 이 있어 도 변 수 를 덮어 쓰 지 않 습 니 다. 즉, private 를 출력 하지 않 습 니 다!$GLOBALS 를 통 해 가 져 온 변 수 는 변 수 를 덮어 쓸 수도 있 습 니 다.
";
if (ini_get('register_globals')) foreach($_REQUEST as $k=>$v) unset(${$k});
print $a;
print $_GET[b];
?>
변수 $a 가 초기 화 되 지 않 았 습 니 다. registerglobals = ON 시 "$a" 의 값 을 제어 하려 고 시도 합 니 다 (http://www.a.com/test1.php?a=1&b=2) 이 코드 때문에 오류 가 발생 할 수 있 습 니 다.
전역 변 수 를 덮어 쓰기 위해 "GLOBALS [a]" 를 입력 하려 고 할 때 (http://www.a.com/test1.php?GLOBALS[a] = 1 & b = 2) 는 변수 '$a' 의 값 을 성공 적 으로 제어 할 수 있 습 니 다.이 는 unset () 기본 값 은 부분 변수 만 삭제 되 며, 전역 변 수 를 없 애 려 면 $GLOBALS 를 사용 해 야 하기 때 문 입 니 다.
registerglobals = OFF 시 전역 변 수 를 덮어 쓸 수 없습니다.
소기: registerglobals 는 전역 변수 로 등록 되 어 있 기 때문에 On 일 때 전 달 된 값 은 전역 변수 로 직접 등록 되 어 사용 되 며, OFF 일 때 는 특정한 배열 에서 가 져 와 야 합 니 다.unset 는 주어진 변 수 를 방출 하 는 데 사 용 됩 니 다.
2. extract () 변수 덮어 쓰기
사용자 가 다음 과 같은 링크 를 구성한다 고 가정 한다.http://www.a.com/test1.php?auth=1
화면 에 private 가 인쇄 됩 니 다!
안전 한 방법 은 register 확인globals = OFF 후 extract () 호출 시 EXTR 사용SKIP 는 기 존 변수 가 덮어 쓰 이지 않도록 보증 합 니 다.
메모: PHP extract () 함수 가 배열 에서 변 수 를 현재 기호 표 로 가 져 옵 니 다.배열 의 모든 요소 에 대해 키 이름 은 변수 이름 에 사용 되 고 키 값 은 변수 값 에 사 용 됩 니 다.
3. 초기 화 변수 옮 겨 다 니 기
흔히 볼 수 있 는 변 수 를 옮 겨 다 니 는 코드 는 변 수 를 덮어 쓸 수 있 습 니 다.

$chs = '';
if($_POST && $charset != 'utf-8'){
	$chs = new Chinese('UTF-8', $charset);
	foreach($_POST as $key => $value){
		$$key = $chs->Convert($value);
	}
	unset($chs);
}
?>
인자 chs 를 제출 하면 변수 '$chs' 의 값 을 덮어 쓸 수 있 습 니 다.
메모: 코드 감사 시 '$k' 와 같은 변수 할당 방식 이 기 존 변 수 를 덮어 쓸 수 있 으 므 로 제어 할 수 없 는 결 과 를 가 져 올 수 있 습 니 다.
4. importrequest_variables 변수 덮어 쓰기
사용자 가 입력 할 때http://www.a.com/test1.php?auth=1웹 페이지 에 private 를 출력 합 니 다!
import_request_variables ('G') 는 GET 가 져 오기 요청 의 변 수 를 지정 하여 변 수 를 덮어 씁 니 다.
소기: importrequest_variables - GET / POST / Cookie 변 수 를 전역 역할 영역 에 가 져 옵 니 다.register 를 금지 하면globals, 하지만 전역 변 수 를 사용 하려 면 이 함수 가 유용 합 니 다.
5. parsestr () 변수 덮어 쓰기
//var.php?var=new
$var='init';
parse_str($_SERVER['QUERY_STRING']);
print $var;

와 parsestr () 유사 한 함수 그리고 mbparse_str()
소기: parsestr - 문자열 을 여러 변수 로 해석 합 니 다. 인자 str 가 URL 로 전 달 된 검색 문자열 (query string) 이 라면 변수 로 해석 하고 현재 역할 영역 에 설정 합 니 다.

좋은 웹페이지 즐겨찾기