PDA

View Full Version : [PHP] gestire una richiesta curl sul server


race2
13-05-2018, 09:40
Salve,
ho fatto questo script per effettuare il login nel mio sito alla pagina "login.php", vorrei che se il login è corretto restituisse "Hello World", poi da qui lo implemento a dovere chiaramente.

Solo che non so come deve essere lo script che valida il login dal curl...
Non so come gestire i dati in arrivo dalla chiamata curl

Mi potete dare un esempio. A dire il vero non so neppure come cercare su google....


$url = 'https://www.mio-sito.it/login.php';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, "D:\Ampps\www\certificate\ActalisAuthenticationRootCA.crt");

curl_setopt($ch, CURLOPT_USERPWD, "username:password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

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

print_r($response);

misterx
13-05-2018, 12:25
https://stackoverflow.com/questions/3008817/login-to-remote-site-with-php-curl

race2
13-05-2018, 13:55
https://stackoverflow.com/questions/3008817/login-to-remote-site-with-php-curl

Gli esempi spiegano come fare quello che ho già fatto io.

Non c'e' nulla su come si gestisce la chiamata dal lato server.

Questo e la destinazione della mia richiesta:
$url = 'https://www.mio-sito.it/login.php';

A me interessa sapere come creare il file "login.php" nel mio server web.
Non so come si raccolgono le variabili da una richiesta curl nella pagina "login.php", non so come raccogliere il valore di "username : password"

curl_setopt($ch, CURLOPT_USERPWD, "username : password");

come faccio ??
$MuUser = $_REQUEST['non so cosa'];
$MuPass = $_REQUEST['non so cosa'];

misterx
13-05-2018, 16:58
https://github.com/php-curl-class/php-curl-class

Nuke987
13-05-2018, 19:01
Sicuro che ti serva il curl? Avrebbe un senso se dovessi loggare il visitatore da un sito web terzo o da altre piattaforme. Se però il visitatore deve accedere all'interno dello stesso sito dove sta navigando, basta un semplice POST. Comunque sia le variabili si passano in questo modo:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/pagina.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('username' => 'ciccia@example.com', 'password' => 'sicuramente_non_in_chiaro')));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
In CURLOPT_POSTFIELDS la funzione http_build_query si occuperà di costruire la query string che poi il server riceverà in $_POST. In pagina.php pertanto potrai accedere all'username da $_POST['username'];. Un appunto sono obbligato a farlo e riguarda la password. Per ovvi motivi di sanità mantale NON mandare la password in chiaro anche se sei su https. Devi necessariamente mandare l'hash della stessa per evitare che cani e porci la leggano.

race2
13-05-2018, 19:53
Sicuro che ti serva il curl? Avrebbe un senso se dovessi loggare il visitatore da un sito web terzo o da altre piattaforme. Se però il visitatore deve accedere all'interno dello stesso sito dove sta navigando, basta un semplice POST. Comunque sia le variabili si passano in questo modo:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://example.com/pagina.php');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('username' => 'ciccia@example.com', 'password' => 'sicuramente_non_in_chiaro')));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
curl_close($ch);
In CURLOPT_POSTFIELDS la funzione http_build_query si occuperà di costruire la query string che poi il server riceverà in $_POST. In pagina.php pertanto potrai accedere all'username da $_POST['username'];. Un appunto sono obbligato a farlo e riguarda la password. Per ovvi motivi di sanità mantale NON mandare la password in chiaro anche se sei su https. Devi necessariamente mandare l'hash della stessa per evitare che cani e porci la leggano.

Ecco, questo mi mancava"http_build_query".

Vorrei fare questo perchè ho delle funzioni sul server remoto,
dal Client vorrei accedere ed eseguirle,
solo che vorrei presentarmi con un login cifrato comprensivo di certificato del server e autenticazione,
come lo script che ho fatto con il mio primo post.

Non è corretto?

Nuke987
13-05-2018, 22:08
Praticamente stai sviluppando un API. Direi di sì, la strada è giusta. Se come dici ci sono altre funzioni da eseguire oltre al login ti consiglio di prevederle da subito. Aggiungerei nella query string il parametro action ($_POST['action'] = 'login'; piuttosto che $_POST['action'] = 'register';). Se vuoi essere super sicuro ed è compatibile con la tua infrastruttura potresti aggiungere nella pagina login.php nel server locale un filtro whitelist in modo che solo le richieste da un determinato hostname e/o IP saranno gestite.

race2
14-05-2018, 10:46
Praticamente stai sviluppando un API. Direi di sì, la strada è giusta. Se come dici ci sono altre funzioni da eseguire oltre al login ti consiglio di prevederle da subito. Aggiungerei nella query string il parametro action ($_POST['action'] = 'login'; piuttosto che $_POST['action'] = 'register';). Se vuoi essere super sicuro ed è compatibile con la tua infrastruttura potresti aggiungere nella pagina login.php nel server locale un filtro whitelist in modo che solo le richieste da un determinato hostname e/o IP saranno gestite.

Si in effetti è come un API, si avevo intenzione di inserire anche un controllo su IP.

Riguardo alla sicurezza per attacchi al'API diciamo, cosa ne pensi con quello script che ho postato per ultimo??

Inoltre ho trovato questo per la sicurezza massima nel curl: https://curl.haxx.se/libcurl/c/CURLOPT_HTTPAUTH.html