Autenticazione server to server

"Null reference exception"? no, grazie, prendo un "unexpected T_VARIABLE"... Questo è il forum per imparare l'arte della programmazione o per chiedere un parere su una sessione di debug particolarmente ostica.
Regole del forum
Ricorda di indicare chiaramente nell'oggetto il linguaggio ([C#] oppure [PHP], [Java], [HTML], ...), se la discussione ne riguarda uno in particolare!
Rispondi
Avatar utente
gidan80
Livello: Floppy disk (3/15)
Livello: Floppy disk (3/15)
Messaggi: 46
Iscritto il: lun feb 24, 2014 8:23 pm

Autenticazione server to server

Messaggio 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.

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

Re: Autenticazione server to server

Messaggio da System » mer lug 09, 2014 5:46 pm


Avatar utente
Zane
Fondatore
Fondatore
Messaggi: 4704
Iscritto il: mer mag 01, 2013 11:20 am
Contatta:

Re: Autenticazione server to server

Messaggio 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;
Zane - TurboLab.it

Avatar utente
gidan80
Livello: Floppy disk (3/15)
Livello: Floppy disk (3/15)
Messaggi: 46
Iscritto il: lun feb 24, 2014 8:23 pm

Re: Autenticazione server to server

Messaggio da gidan80 »

Grazie della risposta, visto che sono un programmatore in erba non ho nessuna confidenza con Curl, sapevo solo che esisteva :D .
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?

Avatar utente
Zane
Fondatore
Fondatore
Messaggi: 4704
Iscritto il: mer mag 01, 2013 11:20 am
Contatta:

Re: Autenticazione server to server

Messaggio 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.
Zane - TurboLab.it

Avatar utente
gidan80
Livello: Floppy disk (3/15)
Livello: Floppy disk (3/15)
Messaggi: 46
Iscritto il: lun feb 24, 2014 8:23 pm

Re: Autenticazione server to server

Messaggio da gidan80 »

Finalmente sono riuscito a venirne a capo. :approvo
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 :aureola

Avatar utente
Zane
Fondatore
Fondatore
Messaggi: 4704
Iscritto il: mer mag 01, 2013 11:20 am
Contatta:

Re: Autenticazione server to server

Messaggio 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!
Zane - TurboLab.it

Avatar utente
gidan80
Livello: Floppy disk (3/15)
Livello: Floppy disk (3/15)
Messaggi: 46
Iscritto il: lun feb 24, 2014 8:23 pm

Re: Autenticazione server to server

Messaggio 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);

Avatar utente
hashcat
Livello: Storage Area Network (12/15)
Livello: Storage Area Network (12/15)
Messaggi: 1946
Iscritto il: gio mag 02, 2013 4:13 pm

Re: Autenticazione server to server

Messaggio 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.

;)
“The quieter you become, the more you can hear”

Avatar utente
gidan80
Livello: Floppy disk (3/15)
Livello: Floppy disk (3/15)
Messaggi: 46
Iscritto il: lun feb 24, 2014 8:23 pm

Re: Autenticazione server to server

Messaggio da gidan80 »

Finalmente ce l'ho fatta!!!
Dopo svariati tentativi(ed imprecazioni :impreco ) 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 :clap

Avatar utente
Zane
Fondatore
Fondatore
Messaggi: 4704
Iscritto il: mer mag 01, 2013 11:20 am
Contatta:

Re: Autenticazione server to server

Messaggio da Zane »

Ottimo! Grazie a te per averci fornito la risposta. Può tornare utile!
Zane - TurboLab.it

System
System
Bot ufficiale TurboLab.it
Bot
Messaggi:
Iscritto il: sab dic 31, 2016 6:19 pm
Contatta: Contatta

Re: Re: Autenticazione server to server

Messaggio da System » mar lug 15, 2014 5:59 pm


Rispondi
  • Argomenti simili
    Risposte
    Visite
    Ultimo messaggio