Skip to content

Commit 3b704e1

Browse files
committed
🚿 curl handle updates
1 parent de635b9 commit 3b704e1

File tree

4 files changed

+39
-21
lines changed

4 files changed

+39
-21
lines changed

src/CurlUtils/CurlHandle.php

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
explode, in_array, is_resource, strlen, strtolower, strtoupper, substr, trim;
1818

1919
use const CURLOPT_CAINFO, CURLOPT_CONNECTTIMEOUT, CURLOPT_CUSTOMREQUEST, CURLOPT_FOLLOWLOCATION, CURLOPT_HEADER,
20-
CURLOPT_HEADERFUNCTION, CURLOPT_HTTP_VERSION, CURLOPT_HTTPHEADER, CURLOPT_INFILESIZE, CURLOPT_NOBODY,
21-
CURLOPT_POSTFIELDS, CURLOPT_PROTOCOLS, CURLOPT_READFUNCTION, CURLOPT_RETURNTRANSFER,
22-
CURLOPT_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYPEER, CURLOPT_TIMEOUT, CURLOPT_UPLOAD, CURLOPT_URL, CURLOPT_USERAGENT,
23-
CURLOPT_USERPWD, CURLOPT_WRITEFUNCTION, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURL_HTTP_VERSION_2TLS,
20+
CURLOPT_HEADERFUNCTION, CURLOPT_HTTP_VERSION, CURLOPT_HTTPHEADER, CURLOPT_INFILESIZE, CURLOPT_MAXREDIRS,
21+
CURLOPT_NOBODY, CURLOPT_POSTFIELDS, CURLOPT_PROTOCOLS, CURLOPT_READFUNCTION, CURLOPT_RETURNTRANSFER,
22+
CURLOPT_SSL_VERIFYHOST, CURLOPT_SSL_VERIFYPEER, CURLOPT_SSL_VERIFYSTATUS, CURLOPT_TIMEOUT, CURLOPT_UPLOAD, CURLOPT_URL,
23+
CURLOPT_USERAGENT, CURLOPT_USERPWD, CURLOPT_WRITEFUNCTION, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURL_HTTP_VERSION_2TLS,
2424
CURLE_COULDNT_CONNECT, CURLE_COULDNT_RESOLVE_HOST, CURLE_COULDNT_RESOLVE_PROXY,
2525
CURLE_GOT_NOTHING, CURLE_OPERATION_TIMEOUTED, CURLE_SSL_CONNECT_ERROR;
2626

@@ -77,7 +77,7 @@ class CurlHandle{
7777
/**
7878
* The cURL handle
7979
*
80-
* @var resource|null
80+
* @var resource|\CurlHandle|null
8181
*/
8282
protected $curl;
8383

@@ -120,7 +120,7 @@ public function close():CurlHandle{
120120
}
121121

122122
/**
123-
* @return resource|null
123+
* @return resource|\CurlHandle|null
124124
* @codeCoverageIgnore
125125
*/
126126
public function getCurlResource(){
@@ -142,24 +142,29 @@ public function getResponse():ResponseInterface{
142142
}
143143

144144
/**
145+
* @link https://php.watch/articles/php-curl-security-hardening
146+
*
145147
* @return array
146148
*/
147149
protected function initCurlOptions():array{
148150
return [
149-
CURLOPT_HEADER => false,
150-
CURLOPT_RETURNTRANSFER => true,
151-
CURLOPT_FOLLOWLOCATION => false,
152-
CURLOPT_URL => (string)$this->request->getUri()->withFragment(''),
153-
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS,
154-
CURLOPT_USERAGENT => $this->options->user_agent,
155-
CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
156-
CURLOPT_SSL_VERIFYPEER => true,
157-
CURLOPT_SSL_VERIFYHOST => 2,
158-
CURLOPT_CAINFO => $this->options->ca_info,
159-
CURLOPT_TIMEOUT => $this->options->timeout,
160-
CURLOPT_CONNECTTIMEOUT => 30,
161-
CURLOPT_WRITEFUNCTION => [$this, 'writefunction'],
162-
CURLOPT_HEADERFUNCTION => [$this, 'headerfunction'],
151+
CURLOPT_HEADER => false,
152+
CURLOPT_RETURNTRANSFER => true,
153+
CURLOPT_FOLLOWLOCATION => false,
154+
CURLOPT_MAXREDIRS => 5,
155+
CURLOPT_URL => (string)$this->request->getUri()->withFragment(''),
156+
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS,
157+
CURLOPT_USERAGENT => $this->options->user_agent,
158+
CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS,
159+
CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTPS,
160+
CURLOPT_SSL_VERIFYPEER => true,
161+
CURLOPT_SSL_VERIFYHOST => 2,
162+
CURLOPT_SSL_VERIFYSTATUS => $this->options->curl_check_OCSP,
163+
CURLOPT_CAINFO => $this->options->ca_info,
164+
CURLOPT_TIMEOUT => $this->options->timeout,
165+
CURLOPT_CONNECTTIMEOUT => 30,
166+
CURLOPT_WRITEFUNCTION => [$this, 'writefunction'],
167+
CURLOPT_HEADERFUNCTION => [$this, 'headerfunction'],
163168
];
164169
}
165170

src/CurlUtils/CurlMultiClient.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ final class CurlMultiClient implements LoggerAwareInterface{
4848
/**
4949
* the stack of running handles
5050
*
51-
* @var \chillerlan\HTTP\CurlUtils\CurlHandle[]
51+
* @var \chillerlan\HTTP\CurlUtils\CurlMultiHandle[]
5252
*/
5353
private array $handles = [];
5454

src/HTTPOptions.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
* @property int $timeout
2323
* @property int $retries
2424
* @property array $curl_multi_options
25+
* @property bool $curl_check_OCSP
2526
*/
2627
class HTTPOptions extends SettingsContainerAbstract{
2728
use HTTPOptionsTrait;

src/HTTPOptionsTrait.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,18 @@ trait HTTPOptionsTrait{
7979
*/
8080
protected int $retries = 3;
8181

82+
/**
83+
* cURL extra hardening
84+
*
85+
* When set to true, cURL validates that the server staples an OCSP response during the TLS handshake.
86+
*
87+
* Use with caution as cURL will refuse a connection if it doesn't receive a valid OCSP response -
88+
* this does not necessarily mean that the TLS connection is insecure.
89+
*
90+
* @see \CURLOPT_SSL_VERIFYSTATUS
91+
*/
92+
protected bool $curl_check_OCSP = false;
93+
8294
/**
8395
* HTTPOptionsTrait constructor
8496
*

0 commit comments

Comments
 (0)