【问题标题】:Get variables inside includes [duplicate]获取内部变量包括[重复]
【发布时间】:2014-06-30 23:12:41
【问题描述】:

通过包含传递 get 变量有哪些安全隐患?

例子:

index.php:

$lastname = $pulleddatabasevalue;

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

header.php:

echo $_GET["lastname"];

由于变量是动态的,我一直在努力让 include() 或会话工作以在 php 包含中为变量 $lastname 分配数据库值。但是,这里的 $_GET 运行良好。它不会显示在浏览器地址栏上,因此不能在那里以敌对方式进行操作。是否有其他方式可以让有恶意的人使用此代码?假设包含目录被锁定,我只是指 index.php。

【问题讨论】:

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

标签: php


【解决方案1】:

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

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

包含是一个严格的名称,我们将其命名为“物理函数”。要发出获取请求,您必须发出请求。包括从服务器读取文件。

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


您应该将 include 视为 COPY PASTE 函数。

在这种情况下:

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

include.php:

var_dump($var);

应该回显 bool(true)

希望对你有帮助。


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

【讨论】:

    【解决方案2】:

    无论以何种方式输出用户提供的输入,其安全隐患都是相同的:转义和验证是必不可少的!否则,您将实施重大安全漏洞。

    除此之外,无论您是直接访问 $_GET,还是先将该值填充到另一个变量中并在您的 include 中访问它,都没有任何区别。

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

    但是,您的代码是错误的。您不能将查询参数作为文件名的一部分传递。它之所以有效,是因为 $_GET 在任何地方都可以作为数组使用,无需任何进一步的代码(阅读 PHP 文档中的“超全局变量”)。

    【讨论】:

      【解决方案3】:

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

      index.php

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

      header.php

          echo $lastname;
      

      外部参考。并推荐阅读:

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 1970-01-01
        • 2015-09-03
        • 2018-02-13
        • 1970-01-01
        • 2017-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多