获取包含的变量

时间:2014-06-30 23:12:41

标签: php

通过include传递get变量有什么安全隐患?

示例:

的index.php:

$lastname = $pulleddatabasevalue;

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

的header.php:

echo $_GET["lastname"];

由于变量是动态的,我一直在努力使include()或会话工作以将变量$ lastname与php include中的数据库值一起分配。但是,$ _GET在这里工作得很好。它没有显示在浏览器地址栏上,因此无法在那里以恶意的方式操纵。是否有其他方式有恶意的人可以使用此代码?假设include目录被锁定,我只引用index.php。

3 个答案:

答案 0 :(得分:2)

抱歉,无法将get参数传递给包含的文件...请参阅:

PHP include() with GET attributes (include file.php?q=1)

Include是一个严格的让它命名为“物理功能”。要发出获取请求,您必须提出请求。包括刚从服务器读取文件。

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


你应该考虑将include作为COPY PASTE函数。

在那种情况下:

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

include.php:

var_dump($var);

应回显 bool(true)

希望它有所帮助。


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

答案 1 :(得分:0)

输出用户提供的输入的安全隐患无论如何完成都是相同的:退出和验证是必要的!否则你正在实施大的安全漏洞。

除此之外,无论是直接访问$ _GET,还是首先将该值转换为另一个变量并访问include中的内容,都没有任何区别。

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

但是,您的代码是错误的。您不能将查询参数作为文件名的一部分传递。它的工作原理是因为$ _GET可以作为一个数组在任何地方使用而无需任何进一步的代码(在PHP文档中读取"超全局变量")。

答案 2 :(得分:0)

保持简单,不要混淆......

的index.php

    $lastname = $pulleddatabasevalue;
    include "../includes/header.php";

的header.php

    echo $lastname;

外部参考。并建议阅读: