php - 阻止直接访问文件的问题
问题描述
我试图拒绝通过浏览器直接访问 do.php 文件。它可以工作,但是这个文件在一些 ajax 脚本中使用,所以一旦我使用上面的代码,它也会阻止文件被 ajax 调用。或执行,我希望它被其他文件访问,而不是在浏览器中直接访问
<Files "do.php">
Order Allow,Deny
Deny from all
</Files>
解决方案
您想要做的事情实际上是不可能的,如果您想将它用于 AJAX 请求,该文件必须是可访问的,并且没有万无一失的方法可以区分您的 AJAX 请求和尝试手动请求文件的人。
通常 AJAX 请求将包含一个额外的X-Requested-With: XMLHTTPRequest
标头。您可以在脚本中检查该标头,如果未设置,则会发出错误。
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
http_response_code(403);
echo 'Direct access denied';
exit;
}
这将阻止您的临时用户尝试仅在新的浏览器选项卡中打开页面,但不会阻止某人使用允许设置标头(如 cURL 或脚本语言)的其他工具访问它。
推荐阅读
- haskell - 关闭 AutoDeriveTypeable
- arrays - 如何显示数组中的图片
- linkedin-api - 在Linkedin上分享文章
- java - 如何知道通过rabbit mq发送的消息的优先级
- python - 使用 google pubsub 的 Python 应用程序被 linux 内核杀死,内存不足
- windows - 用于选择默认打印机的 Windows 应用程序
- airflow - 无法在 Airflow 的自定义运算符中传递 xcom
- python - 基于python源码创建python虚拟环境
- python - 正则表达式:识别缺少空格的字符串
- javascript - 如何将相同的元素推入一个空数组