是否可以检测PHP文件请求

是否可以检测PHP文件请求,php,Php,例如,我们有以下URL: 我想知道是否有可能在report.PHP中检测到pdf.PHP正在试图打开accessreport.PHP?id=341 如果可能的话,我会在后面限制report.php只能由pdf.php、invoice.php等调用 基本上,我想确保report.php是由服务器而不是人工请求的 可能存在安全风险吗 我希望我的问题有意义。提前感谢。最好将逻辑添加到pdf.php、invoice.php等。 您应该在这里处理GET/POST参数。 如果您使用的是普通PHP,请创建一

例如,我们有以下URL:

我想知道是否有可能在
report.PHP
中检测到
pdf.PHP
正在试图打开access
report.PHP?id=341

如果可能的话,我会在后面限制report.php只能由pdf.php、invoice.php等调用

基本上,我想确保report.php是由服务器而不是人工请求的

可能存在安全风险吗


我希望我的问题有意义。提前感谢。

最好将逻辑添加到
pdf.php
invoice.php
等。 您应该在这里处理GET/POST参数。
如果您使用的是普通PHP,请创建一些函数,并将其放在所有其他可通过web访问的PHP文件的开头。例如

if(!check_get_from($_GET)) die; 

但是最好的做法是只有一个入口点(index.php)。

您可以看到用户使用

$_SERVER['HTTP_REFERER']
比如说

if ( $_SERVER['HTTP_REFERER'] == "valid_url.php" ) ...

但是,正如php手册所述,这是不安全的:这是由用户代理设置的。并非所有的用户代理都会设置此功能,有些代理还提供了修改HTTP_REFERER的功能。简而言之,它确实不可信。

您可以尝试使用以下命令来显示$\u服务器阵列的完整内容。它将向您显示所需的变量

print_r($_SERVER);

pdf.php和report.pdf是在同一个域上吗?了解
$\u SERVER[''']
变量,您将知道如何实现这一点。不过,您可能不想转义连接到第一个查询字符串的第二个查询字符串,因为您可能会混淆某些浏览器。@completePHPNewbie我已经检查过了,但是使用了$\u SERVER[']变量,我无法有效地实现这一点。如果您试图限制对report.php的访问,最好让pdf.php通过在pdf.php(或任何其他脚本)中生成的url传递一个键,report.php可以验证它。我知道,但我无法。我会尽量提供更多的细节,因为我的情况很复杂:PNot-able?它们与您提到的位于同一个域:)是的,但pdf.php是生成pdf的文件。例如,它用于各种任务,而不仅仅是此任务:如果您使用普通php,请创建一些函数,并将其放在所有其他web可访问的php文件的开头。例如,如果(!check_get_from($_get))死亡;但是最好的做法是只有一个入口点(index.php)。尝试过了,但不知怎的,我得到了空的$\u服务器['HTTP\u REFERER']