server-side/nginx
Access to the script ‘xxx’ has been denied (see security.limit_extensions)
C/H
2018. 7. 21. 08:30
- Access to the script ‘xxx’ has been denied (see security.limit_extensions)
- Setting up PHP-FastCGI and nginx? Don’t trust the tutorials: check your configuration!
- Nginx/PHP-FPM “Access denied.” error
==> access.log <== 127.0.0.1 - - [19/Jul/2018:21:31:36 +0900] "GET / HTTP/1.1" 499 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" ==> error.log <== 2018/07/19 21:31:36 [error] 933#933: *13 FastCGI sent in stderr: "Access to the script '/mnt/c/Users/uncao/Projects/org.bitbucket/crawler4php/www' has been denied (see security.limit_extensions)" while reading response header from upstream, client: 127.0.0.1, server: crawler4php.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.2-fpm.sock:", host: "domain.com" ==> access.log <== 127.0.0.1 - - [19/Jul/2018:21:32:36 +0900] "GET / HTTP/1.1" 403 20 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" ==> error.log <== 2018/07/19 21:32:36 [error] 933#933: *13 upstream timed out (110: Connection timed out) while reading upstream, client: 127.0.0.1, server: crawler4php.com, request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/run/php/php7.2-fpm.sock:", host: "domain.com"
Why
Nginx 설정오류로 인해서 악의적인 이미지(PHP코드가 삽입된)를 업로드가 된다면(일반적인 게시판 기능에서) Nginx는 이미지를 이미지를 fastCGI로 실행하게 되고, 이미지에 삽입된 PHP 코드는 $_SERVER['PATH_INFO']를 참조해서 /somefilename.php 을 생성한다. 이로인해 악의적인 사용자가 해킹을 할 수 있는 기능을 서버에 삽입이 성공한다.
이는 Ngix포럼 : Re: nginx 0day exploit for nginx + fastcgi PHP에 2010-05-21에 보고되고 논의 되었던 내용이다.
Conclusion
Nginx PATH_TRANSLATED 기능을 제거하면 정상적으로 동작한다.
- cgi.fix_pathinfo 기능을 FALSE 설정.
기본값은 TRUE이다. FALSE로 변경할 경우 PATH_INFO를 사용하는 기능은 작동하지 않을 것이다.(예. 워드프레스) - try_files $url =404; 추가
Nginx와 FastCGI가 물리적으로 같은 서버에 있을 경우 동작 - 악의적인 탐색 URL을 차단하라.
물론 URL만으로 탐지가 불가능하지만... - 설정에서 업로드 폴더를 제외하라.
새로운 어플리케이션(서버설정)을 추가할 때마다 계속 관리해야 한다. - PHP가 없는 서버에서 업로드파일을 관리하라.
콘텐츠는 어찌되었던 정적이기 때문에 별도의 하위 도메인에서 컨텐츠를 제공하면 된다.
반응형