停止对文件夹中所有文件的直接访问,但允许 ajax 请求
Posted
技术标签:
【中文标题】停止对文件夹中所有文件的直接访问,但允许 ajax 请求【英文标题】:Stop direct access to all files in a folder, but allow ajax requests 【发布时间】:2014-01-12 03:12:39 【问题描述】:不确定这是否可能,但是...
假设我有 process/login.php
如果用户直接访问该页面,我会检查用户是否来自发布表单等。如果不是,他们会得到 404'd。
但是我现在正在构建大量的流程脚本等,它们都需要不同的检查,因为有些只是包括在内。
如果用户直接访问任何文件,有没有办法 404 用户?使用 htaccess?
我知道有
Options -Indexes
但这只会停止文件的显示。您仍然可以直接访问任何文件。
如果没有稳定的方法,那么我将手动遍历所有文件并保护它们,但宁愿用户什么都看不到。
【问题讨论】:
一个对我有用的基于 php 的解决方案可以在这里找到:***.com/a/23449295/2883501 【参考方案1】:好吧,它不是 100% 防弹的,因为 HTTP REFERRER 可以被欺骗。
试试这个规则:
RewriteCond %HTTP_REFERER !^http://(www\.)?yourdomain\.com/ [NC]
RewriteRule ^process/login\.php$ - [F,NC]
【讨论】:
+1 这是您(确实)唯一可以做的事情。它仍然是一个可公开访问的文件。【参考方案2】:我建议使用会话。如果会话无效,您可以检查适当的会话并重定向。
另外,我会尝试抛出 404 错误,我会将它们重定向到您的主页。 404 是您的服务器(Apache、nginx 等)在收到无法处理的 GET 请求时抛出的特定错误。您不应该通过从后端代码发送 404 来“欺骗”这些错误。这样做会使您的服务器错误日志充满“噪音”。
【讨论】:
【参考方案3】:检查if (empty($_POST))
,如果满足条件,则重定向到您的主页。这将确保您的表单处理代码已发布到。
【讨论】:
以上是关于停止对文件夹中所有文件的直接访问,但允许 ajax 请求的主要内容,如果未能解决你的问题,请参考以下文章
PHP:如何阻止对文件的直接 URL 访问,但仍允许登录用户下载它?