웹 파일 작업 의 일반적인 보안 구멍 분석(디 렉 터 리,파일 이름 검사 구멍)

웹 개발 을 하면 우 리 는 코드 검 사 를 자주 합 니 다.우 리 는 핵심 기능 을 추출 하거나 구멍 이 나 는 논 리 를 자주 합 니 다.기술 팀 이 커지 면서 팀 원 들 의 기술 이 날로 성숙 해 지고 있다.흔히 볼 수 있 는 바보 형 SQL 주입 구멍,그리고 XSS 구멍.점점 줄 어 들 지만 우 리 는 새로운 은밀 성 구멍 이 가끔 나타 나 는 것 을 발견 할 수 있다.이러한 빈틈 은 개발 자 들 이 한 함수,흔히 볼 수 있 는 모듈 기능 에 대한 설계 가 부족 하고 남 겨 진 문제 에서 비롯 된다.이전에 우 리 는 일부 기능 모듈 을 완성 할 수 있 었 는데,지금 은 안전 하고 정확 한 방법 으로 모듈 을 완성 해 야 한다.그 다음 에 저 는 흔히 볼 수 있 는 기능 모듈 을 공유 하고 디자인 원인 으로 인해 구멍 이 생 길 것 입 니 다.다음은 파일 형 기능 의 구멍 을 읽 어 보 겠 습 니 다.우 리 는 먼저 다음 코드 를 보고 사용 자 를 통 해 서로 다른 디 렉 터 리 를 입력 합 니 다.서로 다른 파일 을 포함 합 니 다

<?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 가 이 값 을 입력 하면 어떤 결과 가 나 올 지 테스트 해 봅 시다image
$mod 는 구 조 를 통 해 진다?mod=...%2F...%2F...%2Fetc%2Fpasswd%00,결 과 는 다음 과 같 습 니 다:
image
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, , !!!!
요약:화이트 리스트 제한 방법 을 발견 하 는 것 이 아 닙 니까?하 는 것 은 간단 합 니 다.그곳 에서 무엇 을 원 하 는 지 알 고 있 으 면 입력 검 사 는 반드시 그것 이 어야 합 니 다.그리고 자신 이 알 고 있 는 것 을 검사 하 는 것 은 알 수 없 는 문 자 를 바 꾸 는 것 보다 훨씬 간단 하지 않 습 니까?자,여기까지.정확 한 문제 해결 방법 은 서 류 를 간단 하고 안전 하 게 할 것 입 니 다!!

좋은 웹페이지 즐겨찾기