【问题标题】:Requesting data using API Confusion between GET and POST | Is this curl get secure to use?使用 API 请求数据 GET 和 POST 混淆 |这个 curl 可以安全使用吗?
【发布时间】:2023-03-11 16:03:01
【问题描述】:

我正在使用它从 API 请求一些数据:

<?php

$query = "https://somewebsite.com/apiv2/customer.stats.json?api_user=USERNAME&api_key=PASSWORD@&user=SUBUSER";

$curl = curl_init();
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $query
));

$result = curl_exec($curl);
curl_close($curl);

echo $result;

?>

现在,变量 $query 包含一个 URL,该 URL 包含用户名和密码。上面的方法使用GET,在处理过程中会不会泄露数据?

对不起,我只是在学习。我知道在处理敏感信息时使用 POST 会更安全,我认为只有在计划更改某些内容时才应该使用 post。在这种情况下,我只是在咨询数据,没有做任何更改,所以在我的脑海中我不能使用 POST。这让我很困惑。

谁能解释一下?将不胜感激。

谢谢。

【问题讨论】:

  • 虽然您使用的是 SSL,因此您的数据在传输到服务器的过程中不会被篡改,但请记住,查询字符串存储在服务器请求日志中,因此任何有权访问日志的人都可以看到。如果服务器被黑了,好吧,剩下的你可以解决:)
  • 感谢您的建议,我现在就解决这个问题:)。

标签: php post curl get


【解决方案1】:

在 CURL 中,您的 URLPARAMETERS 应该分开。在您的选项中使用 CURLOPT_POSTFIELDS 并为您的 CURLOPT_URL 使用基本 URL

编辑:您可能还想考虑将CURLOPT_SSL_VERIFYPEER 设置为true

【讨论】:

  • 不是问题,但在 curl 的 URL 中包含参数不一定是好的做法。
  • 我会将 CURLOPT_SSL_VERIFYPEER 设置为 true,谢谢。但是如何在 URL 中使用参数呢?你能给我解释一下吗?我不想在 URL 中包含用户名和密码。
  • Curl 仍将编译最终请求,尤其是当这是一个 GET 请求时。您只需使用CURLOPT_POSTFIELDS 并将其设置为key=value&amp;key2=value2&amp;key3=value3
  • PS:您应该认为自己很幸运,您不必使用 OAuth2 来访问此 API。很多人开始使用它......我讨厌它(个人)。
  • 哦,我想我明白了,我会尝试这样做,如果我设法让它工作,我会在这里发布。
【解决方案2】:

相关数据将存储在内存中——这是不可避免的。一般来说,这不是安全风险。

连接使用https,所以在连接服务器时不会暴露——这很好!

我看不到对 https 证书的验证,因此任何控制您和他们之间的网络的人(不简单,但并非不可能)都可以冒充服务器并收集信息。不好。

您的脚本中有一个明文密码。如果有人可以下载您的脚本,他们就会知道您的密码。不好,但很难避免。

为了便于阅读,您的“设置”(用户名和密码)应与 URL 分开。不是安全风险,而是糟糕的编程习惯。

为了回应您的评论,为了将用户名和密码分开,您可以这样做:

$username='bob';
$password='s3kr3t!';
$subuser='matty';
$url="http://...?this=$username&password=$password...";

或者,你可以让它更整洁:

$creds=Array(
    "api_user"=>"bob",
    "api_key"=>"1234",
    "user=subuser"
);
$url="http://google.com/?"+http_build_query($creds);

【讨论】:

  • 如何将设置与 URL 分开?我知道这是一个愚蠢的问题,我猜我可以使用“somewebsite.com/apiv2/…”;但好吧,显然我不能:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 2020-07-19
  • 1970-01-01
  • 2018-10-08
  • 2016-01-25
相关资源
最近更新 更多