Pagina 1 di 1
Autenticazione server to server
Inviato: mer lug 09, 2014 5:46 pm
da gidan80
Salve a tutti.
Per questioni di lavoro ho la necessità di creare un sito che, tramite le informazioni ottenute da un altro esegua calcoli utili a sgravare il mio lavoro e quello di tutti quelli che andranno ad utilizzarlo.
Nella sostanza dovrei instaurare una connessione dal mio sito ospitato su altervista.it ad un sito da dove prelevare un txt.
L'inghippo sta nel fatto che per prelevare il txt normalmente bisogna prima effettuare l'accesso all'area riservata.
Avendo a disposizione user e password in che modo posso ottenere il file direttamente dal mio sito?
Nella speranza di essermi spiegato decentemente attendo i vostri aiuti.
Ciao.
Re: Autenticazione server to server
Inviato: mer lug 09, 2014 10:49 pm
da Zane
In PHP:
Codice: Seleziona tutto
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERPWD, "$username:$password");
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
echo $output;
Re: Autenticazione server to server
Inviato: gio lug 10, 2014 11:33 am
da gidan80
Grazie della risposta, visto che sono un programmatore in erba non ho nessuna confidenza con Curl, sapevo solo che esisteva
.
Ho notato che quel codice funziona con pagine di questo tipo: http://agricon.altervista.org/main/riservato/prova.html
Però la mia esigienza era un'altra (infatti mi sono spiegato male):
L' riservata non è del tipo che ho linkato, ma è dello simile a quella di Turbolab:
si accede tramite una pagina di login che genera una sessione PHP e salva 2 cookie di sessione(non ho idea del perchè) nel browser; una volta ottenuto l'accesso mi posso muovere liberamente nel sito fino ad accedere al famoso file .txt.
In sostanza utilizzando Curl dovrei (almeno penso sia così) :
1. Effettuare l'accesso alla pagina di login (in sostanza si inviano tramite metodo POST l'user e la pwd alla pagina a cui punta il form di accesso).
2. Salvare i coockie di sessione provenienti da tale pagina.
3. Scaricare il .txt (inviando quindi al server i cookie precedentemente salvati).
E' una cosa fattibile?
Re: Autenticazione server to server
Inviato: gio lug 10, 2014 1:11 pm
da Zane
C'è un po' da studiarsela, ma direi che puoi usare CURL (o simili) per POSTtare username e password. La gestione dei due cookie dovrebbe (ribadisco il condizionale) esserti trasparente (abiliti il parametro e il motore di CURL riceve+trasmette i cookie), per cui una volta POStato dovresti poter ricevere il tuo txt.
Re: Autenticazione server to server
Inviato: gio lug 10, 2014 7:47 pm
da gidan80
Finalmente sono riuscito a venirne a capo.
Posto il codice semplificato:
Codice: Seleziona tutto
<?php
$url="http://paginaDiLogin.php";
$dati_post='user=usr&password=psw';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dati_post);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
$output = curl_exec($ch);
$url='http://generaFileTxt.php';
$dati_post='variabile1=1&variabile2=2&variabileN=N';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dati_post);
curl_setopt($ch, CURLOPT_COOKIE, 'Cookie: cookieDiSessione=1234567890');
$output = curl_exec($ch);
$url='http://fileTxt.txt';
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPGET, 1); //settato perchè altrimenti la pagina dava errore in quanto non accettava ci fossero passaggi di variabili con POST
curl_setopt($ch, CURLOPT_COOKIE, 'Cookie: cookieDiSessione=1234567890');
$output = curl_exec($ch);
curl_close($ch);
//dopo aver salvato il txt in $output lo si salva nel percorso desiderato
$path="../cartella";
$name = basename($url);
$fp = fopen($path."/".$name,"w");
fwrite($fp,$output);
fclose($fp);
echo $output;
?>
Il tutto funziona, ma non sono sicuro che continuerà ad essere così perchè come puoi vedere ho inserito manualmente i cookie da inviare al server in quanto non ho trovato un'opzione di CURL che gli permetta di gestirli autonomamente. Tali cookie li ho semplicemente copiati da quelli presenti nel mio browser, dopo l'accesso manuale, quindi quando la sessione nel server scadrà (non è detto considerando che quel sito non è proprio ben fatto) non avrò più l'accesso.
Volendo potrei quindi eliminare il primo blocco di codice che è proprio quello da cui si dovrebbero ottenere i cookie "freschi", ma sono sicuro che un'opzione per gestirli c'è o almeno un'opzione per estrarli.
Comunque grazie mille per il tuo suggerimento che mi ha illuminato 
Re: Autenticazione server to server
Inviato: gio lug 10, 2014 8:26 pm
da Zane
Innanzitutto complimenti! Come dicevo, non è banale..
Non ho modo di indagare oltre, ma prova a smanettare con questo:
Codice: Seleziona tutto
curl_setopt($mioCurl, CURLOPT_COOKIESESSION, true);
curl_setopt($mioCurl, CURLOPT_COOKIEJAR, 'mioCookie.txt');
curl_setopt($mioCurl, CURLOPT_COOKIEFILE, 'mioCookie.txt');
Facci sapere come va a finire!
Re: Autenticazione server to server
Inviato: lun lug 14, 2014 11:06 am
da gidan80
Purtroppo, dopo svariati tentativi, mi devo arrendere perchè il sito genera cookie a caso (e non sempre gli stessi).
Ho però intuito qualcosa che potrebbe fare al caso dei meno fortunati e che operano con un sito "convenzionale" (io sono fortunato perchè i cookie di sessione prelevati 5 giorni fa funzionano ancora e penso che continuerà ad essere così
) se si setta l'opzione per far apparire l'header http i cookie appaiono e poi con le espressioni regolari si possono prelevare e salvare su un'array.
Posto il codice un po' abbozzato e non sono sicuro che sia perfettamente funzionante visto che anche con le regex non ho ancora molta confidenza...
Codice: Seleziona tutto
curl_setopt($ch, CURLOPT_HEADER, 1); //viene mostrato l'header http nell'output di CURL
preg_match('/^Set-Cookie:\s*([^;]*)/mi', $output, $m); //espressione per isolare i cookie che poi verranno inseriti nell'array $cookies
parse_str($m[1], $cookies);
var_dump($cookies);
Re: Autenticazione server to server
Inviato: lun lug 14, 2014 2:13 pm
da hashcat
Quanto suggerito da Zane nel precedente messaggio dovrebbe funzionare, se implementato correttamente, anche nel tuo caso.
Il nome dei file cookiejar (dove cURL registra i cookie HTTP inviati da un sito (non quelli impostati via JavaScript)) e cookiefile (dove cURL attinge per inviare i cookie ad un sito) devono coincidere.

Re: Autenticazione server to server
Inviato: mar lug 15, 2014 12:13 pm
da gidan80
Finalmente ce l'ho fatta!!!
Dopo svariati tentativi(ed imprecazioni
) ho finalmente capito che CURL faceva il suo lavoro alla perfezione con le opzioni suggerite da Zane...
Il problema stava nel sito che, una volta inviati i dati di login tramite POST effettuava 2 redirect che venivano seguiti tramite l'opzione "CURLOPT_FOLLOWLOCATION" settata a TRUE ma le pagine in realtà non venivano aperte perchè erano con protocollo https e il certificato non veniva accettato.
Ho risolto inserendo l'opzione "CURLOPT_SSL_VERIFYPEER" settata a false.
Ora tutti i cookie vengono catturati e salvati su file.
Grazie a tutti dell'aiuto 
Re: Autenticazione server to server
Inviato: mar lug 15, 2014 5:59 pm
da Zane
Ottimo! Grazie a te per averci fornito la risposta. Può tornare utile!