【问题标题】:PHP variables safe within a POSTPHP 变量在 POST 中是安全的
【发布时间】:2015-01-13 02:23:47
【问题描述】:

我正在我的网站中制作一个按钮,当单击该按钮时,它会使用 PHP 从另一个网站调用 API。我必须将我的登录详细信息作为变量放在我的 PHP 中。我见过一些攻击,黑客可以通过在地址栏中输入一些东西来获取 PHP 变量的值?不知道是 XSS 还是 SQL 注入还是什么,但我已经看到它会在哪里打印出 XML 格式的 PHP 代码。

这是一个例子:

if (isset($_POST['submit'])) {
   $time = time(true);
   $prize = 200;
   $ID = "my_secret_API_ID";
   $Password = "my_secret_API_Password";
   $APIcall = json_decode(file_get_contents("https://apiwebsite/developer/$ID/get_info&pw=$Password"), true);
   $display = $APIcall ['some_info'];
   echo $display;
}

我的登录信息安全吗?我应该将它们设为 $_POST 之外的全局变量吗?我应该将它们完全定义在一个单独的 PHP 文件中,然后使用包含吗?这有什么不同吗?

【问题讨论】:

    标签: php security variables exploit


    【解决方案1】:

    您实际上从未对从表单中收到的数据进行任何操作。没有任何东西是脆弱的。

    Isset 只返回布尔值,因此不能以暴露任何应用程序的方式进行操作。

    【讨论】:

    • 好的,谢谢。因此,当我看到黑客利用地址栏中的网站并泄露一些网站代码时,仅仅是因为他们的表单没有正确转义/清理吗?
    • @m1xolyd1an 问题在于您如何处理数据,而不是数据的来源。任何漏洞都是由对某些数据(从某处传递/传输)的错误解释引起的
    【解决方案2】:

    我觉得其他答案实际上并没有回答您提出的问题。 Ohgodwhy 的回答与您的 $_POST 变量有关,并且海报是正确的,如果您不使用它们,那么您就不会受到攻击(除非 PHP 或您使用的其他组件 - 不太可能)。

    我认为您的问题与您的这部分代码特别相关?

    $ID = "my_secret_API_ID";
    $Password = "my_secret_API_Password";
    

    如果您的站点上没有Local File Inclusion 漏洞(或类似漏洞),这些变量应该是安全的。确保运行的任何其他代码不会读取本地文件并显示它们,否则恶意用户可能会操纵它们来显示您的凭据。考虑将它们存储在加密的数据库中(在可能的情况下分离代码和数据总是好的)。

      echo $display;
    

    如果https://apiwebsite/developer/$ID/get_info&pw=$Password 曾经返回您无法控制的未编码数据,那么这段代码可能会受到攻击。例如如果 API 中有用户数据并且恶意用户在其中放置了一些 <script> 代码,则您的站点将运行它,除非您通过 htmlentities 进行编码。这将是一个XSS 漏洞。如果您完全信任 apisite 能够正确编码超出其控制范围的值(并且您完全信任 apisite 本身),那么您现有的代码是可以的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 2023-03-10
      • 2011-04-02
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多