웹 파일 작업 의 일반적인 보안 구멍 분석(디 렉 터 리,파일 이름 검사 구멍)
3779 단어 안전 구멍목차파일 이름 검사 구멍
<?php
///
$mod = isset($_GET['m'])?trim($_GET['m']):'index';
///
$mod = str_replace("..",".",$mod);
///
$file = "/home/www/blog/".$mod.".php";
///
@include($file);
이 코드 는 많은 친구 들 이 하 는 프로그램 에서 만난 적 이 있 을 수 있 습 니 다.신인 들 에 게 도 이런 문제 가 발생 하기 쉽 습 니 다.이 코드 를 만 났 을 때 저 는 이 코드 안전 에 있어 서 그런 것 을 할 수 있 느 냐 고 물 었 습 니 다.답:1.맞아요.디 렉 터 리 가 바 뀌 었 기 때문에 사용자 가 모듈 이름 에 들 어 오 면..디 렉 터 리 가 바 뀌 어 요. 2.구조 조합 file 이름,앞 디 렉 터 리 제한,뒤 확장자 제한 이 있 습 니 다.파일 을 포함 하면 이 디 렉 터 리 에 제 한 됩 니 다.이 코드 는 정말 디 렉 터 리 안전 검 사 를 했 습 니까?$mod 가 이 값 을 입력 하면 어떤 결과 가 나 올 지 테스트 해 봅 시다 $mod 는 구 조 를 통 해 진다?mod=...%2F...%2F...%2Fetc%2Fpasswd%00,결 과 는 다음 과 같 습 니 다:
include("/etc/passwd")파일 이 라 니.왜 내 매개 변수 제한 에서 벗 어 났 지?우선:매개 변수 필터 형식 을 만들어 서 사용자 의 입력 을 제한 하 는 것 은 좋 은 방법 이 아 닙 니 다.일반적인 규칙 은 검 측 을 할 수 있 는 것 입 니 다.바 꾸 지 마 세 요.검 측 이 통과 하지 않 으 면 바로 pass 를 떨 어 뜨 립 니 다!이것 은 우리 의 원칙 이다.여과 실패 상황 은 이 루 다 헤 아 릴 수 없다.실제 과정 을 살 펴 보 자.1,입력".../../../"를 통 해".......................................................................이 안에서 확실히 교체 할 수 있다.그렇다 고 나중에 빈 칸 으로 바 뀌 는 건 아니 잖 아.다시 예 를 들 어 보 자.예 를 들 어 문자열 에 있 는 자바 script 을 바 꾸 는 사람 이 있 습 니 다.코드 는 다음 과 같 습 니 다.앞의"j"와 뒤의 회 의 는 새로운 자바 script 을 구성 합 니 다.그 다음:어떻게 탈출 했 는 지 보 자.뒤의.php 제한 은?사용자 가 입력 한 인 자 는"etc/passwd\0"입 니 다.\0 문 자 는 매우 특수 합 니 다.연결 후 파일 이름 이"...etc/passwd\0.php"로 바 뀌 었 습 니 다.이 변 수 를 인쇄 할 때 정확 합 니 다.단,한 단락 을 파일 읽 기와 쓰기 동작 방법 에 넣 으 면\0 뒤에 자동 으로 잘 립 니 다.운영 체제,etc/passwd 파일 만 읽 을 수 있 습 니 다."\0"은 모든 파일 시스템 읽 기와 쓰기 파일 변수 에 나타 납 니 다.똑 같이 처리 할 겁 니 다.이 c 언어\0 은 문자열 의 전체 태그 로 관계 가 있 습 니 다.위의 분석 을 통 해 파일 형식 작업 을 할 때 주의 하지 않 으 면 큰 구멍 이 생 길 수 있다 는 것 을 알 게 되 었 다.그리고 이 구멍 은 일련의 안전 문 제 를 일 으 킬 수 있다.파일 류 작업 을 어떻게 해 야 합 니까?여기까지 오 면 누군가가 이것 을 생각 할 것 이다.파일 읽 기와 쓰기 작업 을 할 때 경로 에 변수 가 있 을 때 나 는 어떻게 해 야 합 니까?교체 해도 되 냐 는 말 이 있 을 것"이 라 고 말 했다."가능 합 니 다.하지만 이 방법 은 교체 가 엄격 하지 않 아 많은 문제 가 발생 할 것 입 니 다."그리고 처음 쓰 는 친구 에 대해 서도 근절 하기 어렵다.올 바른 일 을 하고 올 바른 방법 을 선택 하면 그 자체로 문 제 를 근절 할 수 있다.여기 서 저 는 변수 에 대해 화이트 리스트 제한 을 할 것 을 건의 합 니 다.
1.화이트 리스트 제한 이란 무엇 인가
……
$msg = str_replace(“javascript”,””,$msg);
2.화이트 리스트 를 어떻게 제한 하 는 지 아까 의 예 를 통 해 우 리 는 매 거 유형 이 라면 직접 list 에 값 을 넣 으 면 된다 는 것 을 알 고 있 습 니 다.그러나 어떤 때 는 이렇게 부족 할 때 가 있 습 니 다.우 리 는 또 다른 화이트 리스트 제한 방법 이 있다.바로 문자 범 위 를 제한 하 는 것 입 니 다
:
$mod = isset($_GET['m'])?trim($_GET['m']):'index'; ///
mod :
if(!in_array($mod,array(‘user','index','add','edit'))) exit(‘err!!!');
$mod, , !!!!
요약:화이트 리스트 제한 방법 을 발견 하 는 것 이 아 닙 니까?하 는 것 은 간단 합 니 다.그곳 에서 무엇 을 원 하 는 지 알 고 있 으 면 입력 검 사 는 반드시 그것 이 어야 합 니 다.그리고 자신 이 알 고 있 는 것 을 검사 하 는 것 은 알 수 없 는 문 자 를 바 꾸 는 것 보다 훨씬 간단 하지 않 습 니까?자,여기까지.정확 한 문제 해결 방법 은 서 류 를 간단 하고 안전 하 게 할 것 입 니 다!!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
qmake 의 CONFIG 와 QT 의 잡담C + + 에서 제3자 라 이브 러 리 를 사용 하 는 과정 은 헤더 파일, 링크 라 이브 러 리 파일 을 포함 하 는 과정 임 을 알 고 있 습 니 다. 다음은 Qt 의 헤더 파일 과 라 이브 러 리 파일 을 간단...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.