2013-10-04 2 views
0

나는 서버의 디렉토리에 이미지를 업로드하는 PHP 스크립트가 있습니다. 그러나 이미지가 보안 문제 때문에 루트 디렉토리에 업로드되어서는 안된다는 언급이있었습니다. 현재 업로드중인 디렉토리에 업로드 할 경우 발생할 수있는 보안 취약점에 대해 확신 할 수 없습니다. 다음은 이미지가 저장 될 경로입니다. htdocs/images/filenames.jpg. A screenshot of my directory is shown so that it would be clear이미지 업로드 디렉토리 보안

안전한 방식으로 이미지를 저장할 위치에 대해 알려주십시오.

+0

폴더의 chmod를 644로 설정하고 timestamp와 같이 이미지의 이름을 바꾸면 – JTC

+0

chmod가 644로 설정되어 있으면 사용자가이 디렉토리에 파일을 업로드 할 수있게됩니다. 여기 http : // www. draac.com/chmodchart.html 단어는 읽을 수만 있습니다. 또한 여러 사용자가 동시에 업로드 할 때 중복 타임 스탬프가있을 수 있습니다. – codeGEN

+0

누군가가 PHP 파일이나 다른 실행 파일을 업로드 할 수 있다는 가정하에 보안 기능이 추가되었습니다. 웹 루트 외부에 업로드 디렉토리를두면 이러한 파일을 외부에 둡니다. 업로드 중에 디렉토리를 chmod 명령으로 755로 설정 한 후 나중에 644로 설정할 수 있습니다. – Daniel

답변

1

이미지 업로드의 보안에 관한 많은 논란이 있었지만 우선은 644 디렉토리의 허가입니다. 다음으로 주석을 처리 할 필요가 있습니다. 타임 스탬프는 상당히 좋은 방법이지만 임의로 생성 된 값과 결합되거나 밀리 초를 포함하는 타임 스탬프를 사용해야합니다. 의미있는 이름을 사용하려면 사용자가 제공 한 이름을 삭제하고, null 바이트, 디렉터리 통과 및 기타 위험한 문자를 필터링해야합니다 (이미지 이름의 길이를 허용하거나 제한하거나 임의로 문자열을 생성합니다).

이미지를 웹 루트 외부에두기보다는 php_flag engine off 옵션이있는 .htaccess을 사용하여 디렉토리에서 PHP 실행을 해제하는 것이 좋습니다. 또한 이미지를 웹 루트 외부에두면 이미지를 직접 액세스 할 수 없기 때문에 이미지를 제공하기 위해 PHP 스크립트를 사용하지 않는 한 <img> 태그에서 사용할 수 없습니다 (올바르게 구현 된 경우 매우 안전한 방법 임).

마지막으로 유효 이미지가 업로드되고 있는지 확인하려는 경우 일반적으로 GD 라이브러리가 사용됩니다. 구체적으로는 getimagesize이며 올바른 이미지가 업로드 된 경우에만 이미지 크기를 반환합니다.

이미지 업로드 보안에 대해서도 topic을 확인하십시오.

+0

현재 모든 이미지는 /htdocs/images/filename.png와 같은 웹 루트에 있습니다. 나는 AddHandler에의 CGI 스크립트 .PHP 통해 .pl 평 .jsp로 .ASP .HTM으로 shtml의 .sh가 .cgi 옵션 -ExecCGI이 이 충분합니다 & 또한 내가 다시 오전 다음 명령을 .htaccess 파일을 사용하고 있습니다 GD lib를 사용하여 이미지 크기를 조정하고 사용자의 원래 이미지를 삭제합니다. – codeGEN