1717 explode , in_array , is_resource , strlen , strtolower , strtoupper , substr , trim ;
1818
1919use 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
0 commit comments