CURL per accedere a una pagina che richiede un login da una pagina diversa


125

Ho 2 pagine: xyz.com/ae xyz.com/b. Posso accedere solo xyz.com/bse e solo se effettuo il login per xyz.com/aprimo. Se accedo xyz.com/bsenza passare dall'altro, ottengo semplicemente l'accesso negato (nessun reindirizzamento al login) tramite il browser. Una volta effettuato l'accesso a xyz.com/a, posso accedere all'altro.

Il mio problema è farlo usando il comando curl. Posso accedere con successo xyz.com/autilizzando curl, ma poi provo xyx.com/be ottengo l'accesso negato.

Uso quanto segue:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

Ho provato a utilizzare la seconda riga con e senza la parte utente / password e ancora non funziona. Entrambe le pagine utilizzano la stessa CA, quindi non è un problema. Eventuali suggerimenti? Grazie

Risposte:


147

Il sito Web probabilmente utilizza i cookie per memorizzare le informazioni sulla sessione. Quando corri

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curlviene eseguito due volte, in due sessioni separate. Pertanto, quando viene eseguito il secondo comando, i cookie impostati dal primo comando non sono disponibili; è come se avessi effettuato l'accesso alla pagina ain una sessione del browser e avessi provato ad accedere alla pagina bin un'altra.

Quello che devi fare è salvare i cookie creati dal primo comando:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

e poi rileggili durante l'esecuzione del secondo:

curl --cookie ./somefile https://xyz.com/b

In alternativa puoi provare a scaricare entrambi i file nello stesso comando, che penso utilizzerà gli stessi cookie.


Questo è strano perché quando provo questo, non funziona poiché il cookie memorizzato in somefilecontiene il parametro path ( /ain questo caso) e non viene inoltrato alla seconda chiamata. Se modifico il cookie nel file e metto solo una barra, funziona (cookie inoltrato alla seconda chiamata). Sai se è possibile impedire la memorizzazione del percorso nel file cookie?
рüффп

124

Inoltre potresti voler accedere tramite browser e ottenere il comando con tutte le intestazioni, inclusi i cookie:

Apri la scheda Rete di Strumenti per sviluppatori, accedi, vai alla pagina necessaria, usa "Copia come cURL".

immagine dello schermo


12
Questa è una risposta profonda! Non risponde direttamente alla domanda, perché mostra come rispondere.
bgStack15

5
questa è una delle risposte più utili. Ti consente davvero di osservare e comprendere anche l'autenticazione in più passaggi.
Pierre D

Non sapevo di questa funzionalità sepolta in quegli strumenti fantastici. Super utile!
Timothy C. Quinn

52

Dopo un po 'di googling ho trovato questo:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Non ho idea se funziona, ma potrebbe portarti nella giusta direzione.


9
Funzionerà se si dispone di un sito Web che prevede l'invio di un modulo. Dovrai guardare la fonte e trovare l'immagine <form> e vedere qual è il nome dei campi e su quale URL deve essere pubblicato. È possibile utilizzare il debugger del browser Web per cercare la richiesta di post in modo da poter vedere cosa viene inviato. Questo è un po 'più facile.
furia di pietra

0

La mia risposta è una mod di alcune risposte precedenti di @JoeMills e @user.

  1. Ottieni un cURLcomando per accedere al server:

    • Carica la pagina di accesso per il sito web e apri il pannello Rete degli Strumenti per sviluppatori
      • In Firefox, fai clic con il pulsante destro del mouse sulla pagina, scegli "Inspect Element (Q)" e fai clic sulla scheda Network
    • Vai al modulo di accesso, inserisci nome utente, password e accedi
    • Dopo aver effettuato l'accesso, torna al pannello Rete e scorri verso l'alto per trovare la voce POST. Fare clic con il tasto destro e scegliere Copia -> Copia come CURL
    • Incollalo in un editor di testo e prova questo nel prompt dei comandi per vedere se funziona
      • È possibile che alcuni siti abbiano un hardening che bloccherà questo tipo di spoofing dell'accesso che richiederebbe più passaggi di seguito per aggirare.
  2. Modifica il comando cURL per poter salvare il cookie di sessione dopo il login

    • Rimuovi la voce -H 'Cookie: <somestuff>'
    • Aggiungi dopo curlall'inizio-c login_cookie.txt
    • Prova a eseguire questo comando curl aggiornato e dovresti ottenere un nuovo file 'login_cookie.txt'nella stessa cartella
  3. Chiama una nuova pagina web utilizzando questo nuovo cookie che richiede di essere loggato

    • curl -b login_cookie.txt <url_that_requires_log_in>

L'ho provato su Ubuntu 20.04 e funziona a meraviglia.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.