
フォルダー内に、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
。