PHP 个变量在 POST 内是安全的

PHP variables safe within a POST

我在我的网站上制作了一个按钮,当点击该按钮时,使用 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 文件中完全定义它们然后使用包含吗?这有什么不同吗?

您实际上从未对从表单收到的数据做任何事情。任何东西都不可能受到攻击。

Isset returns 仅为布尔值,因此不能以公开任何应用程序的方式进行操作。

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

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

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

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

  echo $display;

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