【问题标题】:Allow window.location but prevent direct access to a PHP file允许 window.location 但阻止直接访问 PHP 文件
【发布时间】:2016-10-24 10:18:44
【问题描述】:

我有一个名为 script.php 的脚本文件,可通过“Window.location 从另一个名为 ma​​in.php 的 php 文件访问它“ 命令。我想防止直接访问文件,即没有人可以在 URL 栏中键入 script.php 并查看文件的内容。但我希望我的 main.php 能够使用 window.location 重定向到 script.php。有什么办法吗?

我曾尝试使用 Debug Backtracepreg_match(),但它们也阻止了 main.php 中的 window.location。有什么办法可以解决这个问题?

【问题讨论】:

  • 根据定义这是不可能的。这意味着您发布不会同时发布某些资源。你必须自己决定......
  • htaccess 和漂亮的 url 可以解决问题stackoverflow.com/questions/25080835/pretty-urls-with-htaccess
  • 一种方法是,您可以在main.php 中设置一个会话,然后在script.php 中检查该会话是否存在。如果会话存在,您可以允许访问。并且不要忘记在其他页面的开头取消设置该会话。否则你不能这样做。
  • 您可以查看script.php文件中的'referer'标头。
  • 用户仍然可以使用开发工具进行查看。正如@arkascha 提到的,任何客户端都需要发布。

标签: php jquery apache security web


【解决方案1】:

我不太确定您想要做什么以及为什么要这样做。没有办法只允许脚本打开 URL,因为浏览器会处理它。

通常,如果允许用户使用文件,您应该检查文件本身。所以你必须为你找到一个逻辑,如何告诉你脚本,如果用户应该看到它。否则,您可以执行其他操作,例如显示错误或将他重定向回您main.php

只是一些快速的想法......

想法 1.) 如果可能,您可以在main.phpinclude() script.php 并阻止通过.htaccess 直接访问。那么你就不需要重定向,也没有人可以直接访问它。

想法 2.)main.php 中设置一个会话变量,如$_SESSION["allow"] = true; 并在script.php 中再次检查。然后将值设置为false,这样下一次调用就会失败。

想法 3.) 在文件调用中添加一个参数,例如script.php?allow=true。但是在这种情况下,所有知道该参数的用户都可以调用它。

想法 4.) 向重定向添加自定义参数,该参数仅在给定时间有效。简单来说,类似 php time()。检查参数是否在短时间内。但在这种情况下,必须在main.php 文件启动重定向时生成重定向 url。否则请求可能已经过时了。

这就是我的想法。希望能给你一些提示。

【讨论】:

  • 谢谢。我按照你说的方式使用会话变量来解决这个问题。
  • 不客气!随意投票给答案。 ;)
猜你喜欢
  • 1970-01-01
  • 2011-02-10
  • 2022-11-28
  • 1970-01-01
  • 2014-06-04
  • 2014-01-22
  • 2023-03-18
  • 2011-08-11
  • 2017-03-04
相关资源
最近更新 更多