Php 获取包含的内部变量

Php 获取包含的内部变量,php,Php,通过include传递get变量的安全含义是什么 例如: index.php: $lastname = $pulleddatabasevalue; include "../includes/header?lastname=$lastname"; header.php: echo $_GET["lastname"]; 由于变量是动态的,我一直在努力使include()或会话能够在php include中为变量$lastname分配数据库值。然而,$\u GET在这里工作得很好。它不会显示在浏

通过include传递get变量的安全含义是什么

例如:

index.php:

$lastname = $pulleddatabasevalue;

include "../includes/header?lastname=$lastname";
header.php:

echo $_GET["lastname"];

由于变量是动态的,我一直在努力使include()或会话能够在php include中为变量$lastname分配数据库值。然而,$\u GET在这里工作得很好。它不会显示在浏览器地址栏上,因此不能在那里以敌对的方式进行操纵。有没有其他恶意用户可以使用此代码的方法?假设include目录已锁定,我只引用index.php。

对不起,无法将get参数传递到包含的文件。。。见:

Include是一个严格的函数,我们称之为“物理函数”。要发出get请求,必须发出请求。包括从服务器读取文件

顺便说一句,我很好奇,这是怎么可能的,是你让它起作用的。我认为你的代码中有一些误解


您应该考虑将include作为复制粘贴功能。

在这种情况下:

$var = true;
include ('include.php');
include.php:

var_dump($var);
应回声bool(真)

希望能有帮助



在谈到安全问题时,就我而言,包括在我描述的方式中,不应该产生任何新的安全漏洞但您应该检查包含文件的所有权限,以100%确定。

输出用户提供的输入的安全含义是相同的,无论如何执行:转义和验证是必不可少的!否则,您将实现巨大的安全漏洞

除此之外,无论您是直接访问$\u GET,还是首先将值放入另一个变量并访问include中的值,都没有任何区别

唯一的区别是一般的软件维护:前者通常被认为是不好的,因为它是对全局变量的访问,而后者可能是函数调用的一部分,并且可能更好地封装变量名


但是,您的代码是错误的。不能将查询参数作为文件名的一部分传递。它之所以有效,是因为$\u GET可以作为数组在任何地方使用,而无需任何其他代码(请阅读PHP文档中的“superglobal variable”)

index.php 页眉 外部参考文献。建议改为:


如果在include之前定义变量,则可以像使用任何其他变量一样使用该变量。没有安全隐患,因为它不是这样工作的。这个问题似乎是离题的,因为它基于上述代码工作的错误假设。因此,它无法得到真正的回答。我可以证明代码是有效的。实际代码中的URL是不同的。显然,header.PHP和index.PHP中都有打开和关闭PHP标记。但它确实很管用。在阅读别人的评论时,它似乎不应该管用。我真的很好奇为什么它对我有用?它使用GET获取$lastname的值。奇怪。
    $lastname = $pulleddatabasevalue;
    include "../includes/header.php";
    echo $lastname;