문제

안녕하세요,저는 개발 사진 공유 사용하여 웹 사이트 CodeIgniter PHP framework.아이디어는 사람들이 자신의 사진을 업로드,그들을 관리(을 통해 어떤 종류의 파일을 브라우저는 그들을 만들 수 있습 하위 폴더에 파일을 드래그 등)및 편집들(일부는 기본 것 같은 크기 조정,자전 및르기 시작하고,나중에는 추가 약간의 고급 기능).

나는 이미 구현하는 제삼자 인증 솔루션을 CI(돌아 인증 Beta2 고)나는 이제 통합 JS/PHP 파일 관리자(AjaxExplorer지),그러나 문제는 PHP 드 파일 관리(이동,복제,등등)은 신뢰를 너무 많이 사용자 입력에서 ajax 를 호출합니다.예를 들어,그것의 일을 하는 다음과 같이(간체는 명확성을 기하기 위해):

move_uploaded_file($_FILES['upload']['tmp_name'], $root.$username.$_POST['destination_dir']);

당신이 볼 수 있듯이,거기에 명백한 보안 문제로 그것 맹목적지 어떤 경로를 사용자에 발생!할 수 있습을 보내는 사람이 같은 것"../AnotherUser/로"$_POST['destination_dir']값입니다.

나의 질문은: 최선의 방법은 무엇일을"sandbox"사용자,하기 위해서만 허용하도록 그를 관리하는 자신의 데이터가? 나는 그냥 확인+필터 입력을 잡으려고 희망,매도의 침입?이 있는 라이브러리/패키지 주소이 특정 문제입니까?

저는 이 문제를 생각해야 합게 해결에서 어떤(성숙한 충분한)프로젝트 제공하는 사용자의 힘을 관리하는 파일을 자신의 웹 브라우저를 통해 그래서 나를 찾을 것으로 예상된 명확한 지침이(으로 많은에 대한 SQL Injection,XSS,CSRF,etc.)하지만 난지를 사용하여 오른쪽 키워드가 있습니다.

도움이 되었습니까?

해결책

최선의 방법은 무엇일을"sandbox"사용자,하기 위해서만 허용하도록 그를 관리하는 자신의 데이터가?

모든 파일 이름/디렉토리에 이름을 사용자가 원하지만 단순히 그들을 사용하지 않는 서버 측에서 파일시스템입니다.대신,쓰기 경로 이름으로 데이터베이스의 기본 키를 사용하고,기본 키 파일 이름으로 다음과 같'34256.dat'에서 평평한 저장 디렉터리(또는 BLOB 데이터베이스에서 당신이 선호하는 경우).다음까지 제공을 통해 다운로드 또는 스크립트 URL 재작성을 원하시는 파일에 나타납니다.

소독 들어오는 파일 이름 .검'..'은 단지 시작에 불과합니다.너무 긴 파일 이름;너무 짧은 파일 이름;조합의 앞뒤를 점;조합의 선도적 공백;다른 디렉터리 구분의 서로 다른 플랫폼잘못된 문자 중 일부에 플랫폼제어 문자;유니코드 문자와 환경-특정 위치를 지정하는 방법들을ADSs;파일명('.htaccess')또는 확장자('.php','.cgi')할 수 있는'특별한'당신의 웹 서버Windows 소유의 파일 이름...

을 보낼 수 있는 평생을 아래로 추적 재미있는 작은 쿼크의 filepath 규칙에서 다양한 플랫폼으로,또는 당신이 그것을 잊을 수고를 사용하여 데이터베이스입니다.

다른 팁

내가 무엇인지의 destination_dir 처럼 보이지만,무엇을 생각했 할당 디렉토리 키를,그리고 다음은 디렉토리에 기반하는 키입니다.예를 들어:

//$_POST['destination_dir'] = '4hg43h5g453j45b3';
*_query('SELECT dir FROM destinations WHERE key = ? LIMIT 1'); //etc.

그러나 당신을 미리 정의 열쇠입니다.또 다른 대안이 될 수 있는 반대:md5/sha1 을 입력하고 사용하는 것으로 destination_dir,다음 저장하는 핵심 데이터베이스로 연결된 레이블이 있습니다.

이 없 라이브러리입니다.
그러나의 특정 예를 들어,모든 스트립(다)슬래시고 점에서 문자열한 다음에 추가 슬래의 끝에 그것은,그 방법은 사용자를 변경할 수 없습 폴더에 있습니다.

$destdir = str_replace(array('.', '/', '\\'), '', $_POST['destination_dir']); 
$destdir .= "/";
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top