我有页眉、页脚和其他处理/include/
文件夹中的 ajax 请求的 php 文件。
对于静态网站,用于设置 nginx 默认文件为
location ^~ /include/ { deny all; }
当有人去的时候www.mysite.com/include/header.php
它返回403 Forbidden
但是现在,由于我使用 jquery ajax 调用文件/include/
夹内的文件,如果我设置这个 =>
location ^~ /include/ { deny all; }
,没有像保存或报告这样的 ajax 功能。
有没有什么办法可以拒绝访问里面的文件文件/include/
夹其他所有人但要做到这一点仅对 webroot 文件可访问?
我尝试过这些:
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;
}
}
但是,在这种情况下,添加^~
会导致页面@ www.mysite.com/include/header.php
‘header.php’被下载;在浏览器中访问它时。
我没有使用任何 CMS,只是使用带有 css 和 js 的纯 php 文件,包括 bootstap 的。(nginx 1.4.6、mysql、php5-fpm 堆栈)
非常感谢您的任何建议。
答案1
发出 AJAX 调用的不是服务器,而是客户端的浏览器,因此仅允许服务器访问该文件夹并不能实现您期望的效果。
我的建议是将所有通过 AJAX 调用的文件移动到一个单独的文件夹(/ajax
也许)并保留您为该文件夹配置的内容include
。
理论上,里面的文件/include
不应该被浏览器直接调用,但很可能被脚本语言包含(想象一下!)。这就是为什么 AJAX 请求的文件应该放在自己的文件夹中。
另外,您可以将 AJAX 请求重写到/include
文件夹,但我不确定是否deny
适用于这种情况。
答案2
您可以根据大多数 Javascript 框架添加到其 AJAX 请求的标头来允许访问,但请注意,任何人都可以伪造这样的请求 - 您无法确定它确实是来自您的 web 应用程序的 AJAX 请求,而不是某人手动、使用或类似方式X-Requested-With: XMLHttpRequest
复制 AJAX 请求。curl