停止对文件夹中所有文件的直接访问,但允许 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 请求的主要内容,如果未能解决你的问题,请参考以下文章

保护子文件夹不受直接访问,但允许系统访问

拒绝对 WAMP 文件夹中所有文件的直接访问(下载)

PHP:如何阻止对文件的直接 URL 访问,但仍允许登录用户下载它?

阻止通过 http 直接访问文件,但允许 php 脚本访问

如何拒绝直接访问网站文件但允许网站文件通过包含'file.php'相互访问?

拒绝使用 htaccess 直接访问文件