[웹 보안] 변수 덮어 쓰기 구멍
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) 이 라면 변수 로 해석 하고 현재 역할 영역 에 설정 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
django 출력 html 내용최근에 django를 배웠기 때문에 django로 간단한 사이트를 만들었습니다. 연습을 하는데 구체적인 기능은 인터넷에서 데이터를 캡처해서 제 사이트에 올리는 것입니다. 그런데 문제가 하나 생겼습니다. 바로 djan...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.