【问题标题】:Stop an included file PHP from direct access except for JavaScript files [closed]停止包含文件 PHP 的直接访问,JavaScript 文件除外 [关闭]
【发布时间】:2018-06-09 02:06:47
【问题描述】:

我知道有很多方法可以阻止直接访问(浏览)PHP 文件,即:

  • 配置服务器拒绝他们
  • 检查变量或常量是否已设置
  • 检查文件是否在调用自身(使用basename$_SERVER['PHP_SELF']

但是,我正在进行实时搜索。用户每按一次键,它就会通过 AJAX 将关键字发送到 PHP 文件中。使用以下方式可以阻止对包含文件的访问,但也可以阻止对 JavaScript 文件的访问。

此外,我上面说的 PHP 文件还包含另一个 PHP 文件,所以我认为传递一个变量并检查它是不可能的,因为您正在定义一个变量并在同一个文件中检查它。

有人有什么想法吗?任何帮助表示赞赏!

【问题讨论】:

  • 您希望人们使用这些文件,但同时阻止人们使用这些文件?我不确定我是否理解这里的问题
  • 浏览器可以访问的任何东西,最终用户都可以访问。我也不完全理解这个问题;我认为你要问的基本上是不可能的
  • @apokryfos,我的意思是我想阻止 php 浏览,但让 Javascript 文件访问它
  • 你可以do this,但这不是万无一失的。
  • @WebDegBrian AJAX 请求与浏览器向您的服务器发出的任何其他请求几乎没有区别。您当前情况的所有“解决方案”都是微不足道的,例如this padlock。您需要在 PHP 文件中正确实现安全性,并区分应该公开访问的内容与应该通过仅包含使用的内容,并且可能应该位于您网站的内容根目录下方。

标签: javascript php .htaccess


【解决方案1】:

我终于找到了答案。它仍然使用我上面所说的以下方式之一,但需要在搜索文件中添加条件。
常见的包含文件:

if (basename(__FILE__) == basename($_SERVER['PHP_SELF'])) {
    header("Location: http://example.com/404");
    exit();
} //Check if the file is calling itself

并在搜索文件中:

if (basename(__FILE__) == basename($_SERVER['PHP_SELF']) && !isset($_POST['query'])) {
    header("Location: http://example.com/404");
    exit();
} //Check if the file is calling itself and there is no request found

【讨论】:

    猜你喜欢
    • 2010-09-29
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2013-04-02
    相关资源
    最近更新 更多