nginx 서버의 모든 {deny:all;}에 대해 PHP 파일이 있는 폴더에 대한 액세스를 차단하지만 ajax 호출이 해당 폴더의 파일에 액세스하도록 허용하는 방법은 무엇입니까?

nginx 서버의 모든 {deny:all;}에 대해 PHP 파일이 있는 폴더에 대한 액세스를 차단하지만 ajax 호출이 해당 폴더의 파일에 액세스하도록 허용하는 방법은 무엇입니까?

폴더 에 Ajax 요청을 처리하는 머리글, 바닥글 및 기타 PHP 파일이 있습니다 /include/.

정적 웹사이트의 경우 nginx 기본 파일을 다음으로 설정하는 데 사용됩니다.

location ^~ /include/ { deny all; }

그리고 누군가가 그곳에 갔을 www.mysite.com/include/header.php403 Forbidden

하지만 지금은 폴더 내부의 파일에 대해 jquery ajax 호출을 사용하기 때문에 /include/이것을 설정하면 =>

location ^~ /include/ { deny all; }, 작업 저장이나 보고와 같은 Ajax 작업은 없습니다.

내가 할 수 있는 방법이 있을까?내부 파일에 대한 액세스를 거부합니다.폴더/include/다른 사람들하지만 해내다웹루트 파일에만 접근 가능?

나는 이것을 시도했다:

location ^~ /include/ { allow 127.0.0.1; deny all; }하지만 그건 작동하지 않습니다.

location ^~ /include/ { allow <my server's ip>; deny all; }하지만 그건 작동하지 않습니다.

SSH 포트를 22에서 123으로 변경했습니다. 다음을 입력해야 하나요?

location ^~ /include/ { allow 127.0.0.1:123; deny all; }대신에?


다음에서 핫링크를 중지하는 튜토리얼을 참조했습니다.http://www.nginxtips.com/how-to-stop-image-hotlinking-on-nginx/

그에 따르면: 나는 노력했다.

location ~ .(gif|png|jpe?g)$ {
     valid_referers none blocked mysite.com *.mysite.com;
     if ($invalid_referer) {
     return   403;
    }
}

이미지의 핫링크를 방지하기 위해(작동하지 않았던 것 같습니다.) 그리고

location /include/ {
     valid_referers none blocked mysite.com *.mysite.com;
     if ($invalid_referer) {
     return   403;
    }
}

폴더 에 대한 액세스를 방지합니다 /include/.

그 중 아무 것도 작동하지 않았습니다. 예, 거기에 있는 mysite를 내 웹사이트의 실제 이름으로 바꿨습니다.

나는 또한 이것을 시도했습니다 :

 location ^~ /include/ {
         valid_referers none blocked mysite.com *.mysite.com;
         if ($invalid_referer) {
         return   403;
        }
    }

하지만 이 경우 추가하면 ^~@ 'header.php' 페이지가 다운로드되었습니다. www.mysite.com/include/header.php브라우저에서 방문할 때.

저는 CMS를 사용하지 않고 부트스트랩을 포함하여 CSS 및 js와 함께 사용되는 일반 PHP 파일만 사용합니다. (nginx 1.4.6, mysql, php5-fpm 스택)

어떤 제안이라도 대단히 감사하겠습니다.

답변1

서버는 AJAX 호출을 수행하는 것이 아니라 클라이언트의 브라우저이므로 해당 폴더에 대한 서버 액세스만 허용하면 예상한 대로 작동하지 않습니다.

내 제안은 AJAX를 통해 호출된 모든 파일을 별도의 폴더( /ajax아마도)로 옮기고 폴더에 대해 구성한 내용을 그대로 두는 것입니다 include.

이론적으로 내부 파일은 /include브라우저에 의해 직접 호출되어서는 안 되지만 스크립트 언어에 의해 포함될 가능성이 높습니다(상상해 보십시오!). 그렇기 때문에 AJAX에서 요청한 파일은 자체 폴더에 있어야 합니다.

대안으로 AJAX 요청을 폴더에 다시 작성할 수 있지만 이러한 경우에도 적용될지는 /include확실하지 않습니다 .deny

답변2

대부분의 Javascript 프레임워크가 AJAX 요청에 추가하는 헤더를 기반으로 액세스를 허용할 수 있지만 X-Requested-With: XMLHttpRequest누구나 그러한 요청을 위조할 수 있습니다. AJAX 요청을 복제하는 사람이 아니라 실제로 웹앱에서 오는 AJAX 요청인지 확신할 수 없습니다. 수동으로 사용하거나 curl이와 유사합니다.

관련 정보