2014-02-05 1 views
0
내가 preg_replace이다

을 .php.png .php.jpg, .js.jpg, 가에,을 .js.png 같은 것을 보안 목적으로 업로드 된 파일 (이미지)의 이름이며 업로드가 완료된 후 파일을 해당 폴더로 이동하기 전에 교체해야하는 확장이 있는지 알고 싶습니까?업로드 된 이미지의 이름이 포함되어있는 경우 .php.jpg

+2

대체하려면 어떻게해야합니까? –

+0

파일 업로드 후 파일을 PHP 파일로 실행할 가능성을 제외합니다. – user1190478

+0

가능한 [중복 된 보안 위협] (http://stackoverflow.com/questions/11061355/security-threats-with-uploads) – deceze

답변

3

파일 이름 만 보는 것은 악성 코드/실행 파일을 업로드하는 것을 방지하는 안전한 방법이 아닙니다.

업로드를 허용하는 파일 유형에 따라 더 안전하게 재생할 수있는 방법이 있습니다.

일반적으로 웹에서 공개적으로 액세스 할 수있는 위치에 파일을 업로드하지 마십시오. 100 % 알기 전까지는 의심의 여지가 없습니다.

이미지 업로드를 허용하는 경우 GD 또는 ImageMagick과 같은 서버 측 기술을 사용하여 파일을 다시 저장하십시오. 이러한 도구가 업로드 된 이미지에서 유효한 이미지를로드 할 수없는 경우 (알고있는 오류를 발견하면 ...) 수동으로 조사 할 때까지 파일을 삭제하거나 격리하십시오.

확장 파일이 스왑 아웃/대체 된 경우에도 업로드 된 파일을 원본 파일 이름으로 저장하지 마십시오.

업로드 보안을 위해 사이트에서 좀 더 자세한 정보를 검색하십시오.이 질문은 합리적으로 정기적으로 제기됩니다.

+0

chmod()를 통해 파일 액세스 권한을 설정하면 사용 권한이 변경된 것을 볼 수 없습니다. 변경 전 fileperms()를 통해 권한 모드를 표시하고 변경 한 후에는 값이 동일합니다. Ajax 응답 텍스트에는 33206이라는 동일한 값이 들어 있습니다.이 파일에 대한 사용 권한이 변경되지 않았 음을 의미합니까, 아니면 현재 Windows 환경에서 스크립트를 테스트하고있는 것과 관련이 있습니까? – user1190478

0

파일에 대해 필요한 작업에 따라 파일을 암호화하거나 gzip을 실행할 수 있습니다. 서버 공간을 절약 할 수 있으며 누군가가 스크립트 파일을 업로드하면 http 요청을 통해 실행할 수 없습니다. 내가해야 할 일은 제출 된 공개 액세스가 있는지 확인하고 htaccess 파일을 설정하는 것입니다.

+0

어떻게 수행 할 수 있습니까? – user1190478

+0

php 거기에 내가 사용할 수있는 zlib 및 htaccess 파일에 대한 많은 자습서가 인터넷에 있다고 생각합니다 – xasz

0

대답이 맞다. 예를 들어 'phtml', 'java', 'perl', 'py', 'asp와 같은 블랙리스트 방식을 사용하려는 경우 블로킹을 고려해야하는 다른 많은 실행 가능 확장 프로그램이 있습니다. ','go '를 선택하면 맬웨어를 제공 할 수있는 exe와 박쥐 등을 고려해야합니다.

하지만 업로드하려고하는 경우가 아니라 완전히 이동 (또는 더 복잡한 부분에 도달하기 전에 일종의 양식 유효성 검사로 업로드하는 것조차도)을 차단하려는 경우 블랙리스트 만 사용합니다. 움직일 때 이름을 바꾸십시오. 어떤 미지의 Java 또는 Go 또는 Python 등이 서버에 있는지에 관계없이 심지어 Apache에 있지 않아도 (마지막 세그먼트 이외의 장소에 실행 파일 확장명을 넣을 수 있음) 상관없이. 왜 그 업로드가 진행되도록 허용합니까? 3+ 레벨 이름을 허용하지 않는 것이 더 간단 할 수 있지만 (사람들이 추천하는 것을 볼 수 있습니다), 언어 식별과 같은 3 가지 레벨 이름의 적법한 사용이 많습니다. 이 접근법만으로는 실행 코드에서 안전하게 지켜주지는 않습니다. 이는 파일 업로드를 가능한 한 안전하게 만들기위한 더 큰 일련의 작업 (예 : 이미지 파일에서 포함 된 코드를 확인하려는 경우)의 일부 여야합니다.

+0

답변 주셔서 감사합니다. 스크립트를 작성하여 모든 이미지의 이름을 바꾸고 고유 한 이름을 지정한 다음 해당 디렉토리로 이동합니다. 포함 된 코드는 어떻게 확인할 수 있습니까? – user1190478

+1

Joomla가 무엇을하는지 확인할 수 있습니다. https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/helper/media.php#L190 – Elin

+0

@Elin. 정말 도움이되었습니다! – user1190478

관련 문제