1

我想以安全的方式与 API 连接,并且我正在cURL使用 HTTPS 和 SSL 来进行连接。

现在,我想知道在安全性方面什么更好,通过GETor发送数据POST

$ch = curl_init("http://api.website.com/connect.php?user=xxx&pass=xxxx");
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);

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

或者

$param['user'] = 'xxxx';
$param['pass'] = 'xxxx';
$ch = curl_init("http://api.website.com/connect.php");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $Parameters);

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,  2);

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

我还意识到POST检索数据要慢得多。

4

3 回答 3

4

两者都不。“GET 参数”是 URL 的一部分,它是 HTTP 请求标头的一部分,“POST 参数”是 HTTP 请求正文的一部分。两者都是同一个 HTTP 请求的一部分,都是纯文本。“安全”没有区别。

根据请求的类型在语义上使用 GET 或 POST,而不是出于安全考虑。

唯一的问题是,请求的 URL 比整个请求正文更有可能出现在日志文件中。但是一个日志记录将是您将数据发送到的服务,所以它没有太大的区别。

于 2012-11-30T11:04:34.857 回答
1

它们都不是安全的,但如果您使用安全连接 (https),​​您可以使用 POST,因为正文将被加密。发送密码不是一个好主意,即使是带有 URI 的用户名也不行。

于 2012-11-30T11:06:13.427 回答
1

在这个原因中,因为您使用的是 HTTPS,GET 和 POST 与彼此一样安全,因为它们都将在传输层上进行加密。

例如,如果您没有使用 HTTPS,那么在某些情况下,POST 可能会更好,但不一定更安全。这是因为服务器通常记录查询字符串,而通常不记录 POST 数据。

于 2012-11-30T11:09:02.423 回答