【问题标题】:Is it possible to restrict web folder access for everything except application's own AJAX calls?是否可以限制除应用程序自己的 AJAX 调用之外的所有内容的 Web 文件夹访问?
【发布时间】:2013-10-28 18:25:28
【问题描述】:
请我就以下问题征求您的意见:
我想通过 Web URL 限制对 Web 文件夹的访问(我知道这可以使用 .htaccess 来完成)。但是,我担心的是我还希望 AJAX 调用可以访问此文件夹中的代码文件。
参考问题:
deny direct access to a folder and file by htaccess
因此假设 .htaccess 中的任何访问允许/拒绝规则也自动适用于 AJAX 调用(因为它们基于 URL)是否正确?如果是这样,让服务器访问机制知道它是一些试图与之通信的“代码”的最佳方法是什么?
如果我可以提供任何澄清或其他详细信息,请告诉我。
非常感谢!
【问题讨论】:
标签:
ajax
regex
apache
.htaccess
mod-rewrite
【解决方案1】:
您可以根据HTTP_REFERER 这样做,将此代码放入您的DOCUMENT_ROOT/.htaccess 文件中::
RewriteEngine On
## disable direct access
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/ [NC]
RewriteRule ^somefolder - [F,NC]
虽然我必须补充一点,基于HTTP_REFERER 的检查不是很强,很容易被欺骗。
【解决方案2】:
您应该实现基于会话的身份验证机制。
- 在您的应用程序中,用户登录。
- 在您的 ajax 文件中,您测试用户是否已通过身份验证,如果未通过,则返回
403 Forbidden 标头。
您还可以使用 ajax 发送自定义标头,并在您的 ajax 文件中进行测试,或者使用 .htaccess(如果存在)进行测试。但这不如身份验证安全,因为有人可能伪造请求。