nginx サーバー上で、php ファイルを含むフォルダーへのアクセスをすべてのユーザーに対してブロック {deny:all;} しながら、そのフォルダー内のファイルへのアクセスを ajax 呼び出しに許可するにはどうすればよいでしょうか?

nginx サーバー上で、php ファイルを含むフォルダーへのアクセスをすべてのユーザーに対してブロック {deny:all;} しながら、そのフォルダー内のファイルへのアクセスを ajax 呼び出しに許可するにはどうすればよいでしょうか?

フォルダー内に、Ajax リクエストを処理するヘッダー、フッター、その他の PHP ファイルがあります/include/

静的ウェブサイトの場合、nginxのデフォルトファイルを次のように設定します。

location ^~ /include/ { deny all; }

そして誰かがwww.mysite.com/include/header.phpそこに行くと、403 Forbidden

しかし、/include/フォルダ内のファイルに対してjQuery Ajax呼び出しを使用しているため、これを設定すると=>

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 は使用していません。bootstap のものも含め、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が、誰でもそのようなリクエストを偽造できることに注意してください。つまり、それが本当に Web アプリケーションからの AJAX リクエストであり、 または同様のものを使用して誰かが手動で AJAX リクエストを複製したものではないことを保証することはできませんcurl

関連情報