2012-11-30 35 views
0

我想以安全的方式使用API​​進行連接,並且我正在使用cURL使用HTTPS和SSL進行連接。現在哪個更安全GET或POST發送帶有cURL參數的PHP

,我想知道什麼是在安全性方面更好,通過GETPOST發送數據:

$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是檢索更慢數據。

+0

你真的應該問一下你捲曲的頁面是什麼 –

+0

它接受這兩種方法。 – Alvaro

回答

3

都沒有。 「GET參數」是作爲HTTP請求頭部分的URL的一部分,「POST參數」是HTTP請求體的一部分。兩者都是同一個HTTP請求的一部分,這些都只是純文本。 「安全」沒有區別。

根據請求的類型,使用GET或POST語義,而不是因爲安全考慮。

唯一的問題是請求的URL更可能出現在日誌文件中,而不是整個請求主體。但是一個日誌記錄就是你發送數據的服務,所以它沒有太大區別。

+0

好的,所以使用'HTTPS'就夠了,對吧? – Alvaro

+1

對。加密會帶來安全性,而不是您通過未加密連接發送數據的格式。 – deceze

+0

「......一個日誌記錄就是你發送數據的服務,所以它沒有太大區別。」 - 好吧,我們現在知道情況並非如此:) – jww

1

它們都不是安全的,但是如果您使用安全連接(https),則可以使用POST,因爲身體會被加密。發送密碼並不是一個好主意,甚至不是使用URI的用戶名。

+1

HTTP標頭也通過HTTPS加密。 – deceze

+0

@deceze我沒有說他們不是,但正如你所說,郵政進入了身體,所以我沒有提到標題。 [這](http://stackoverflow.com/questions/187655/are-https-headers-encrypted) – chechopeefe

+0

然後,我不知道爲什麼你建議POST over GET「身體會被加密」...?! – deceze

1

在這個原因中,因爲您正在使用HTTPS,GET和POST就像彼此一樣安全,因爲兩者都將在傳輸層上加密。

例如,如果你沒有使用HTTPS,然後在某些情況下,POST可以更好但不一定更安全。這是因爲服務器通常記錄查詢字符串,而POST數據通常不會被記錄。

+0

感謝您的回答!順便說一句,我應該在我的連接URL添加「https」以確保安全? – Alvaro

+0

@Steve yes如果外部服務器支持https :) – MrCode