CURL для доступу до сторінки, яка потребує входу з іншої сторінки


125

У мене 2 сторінки: xyz.com/aі xyz.com/b. Я можу отримати доступ xyz.com/bлише в тому випадку, якщо і лише в тому випадку, якщо я xyz.com/aвперше ввійду. Якщо ви отримуєте доступ, xyz.com/bне переходячи через інший, мені просто забороняється доступ (без переадресації на вхід) через браузер. Після входу в систему xyz.com/aя можу отримати доступ до інших.

Моя проблема - це робити за допомогою команди curl. Я можу успішно увійти в систему для xyz.com/aвикористання curl, але потім спробуйте, xyx.com/bі мені буде відмовлено у доступі.

Я використовую наступне:

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

Я спробував використовувати другий рядок із & без частини користувача / пароля, і все ще не працює. На обох сторінках використовується одна і та ж CA, тому це не проблема. Будь-які пропозиції? Дякую

Відповіді:


147

Веб-сайт, ймовірно, використовує файли cookie для зберігання інформації про сеанс. Коли ти біжиш

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

curlвиконується двічі, в два окремих сеанси. Таким чином, коли виконується друга команда, файли cookie, встановлені 1-ю командою, недоступні; це так само, як якщо б ви ввійшли на сторінку aв одному сеансі браузера і намагалися отримати доступ до сторінки bв іншому.

Що потрібно зробити, це зберегти файли cookie, створені першою командою:

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

а потім перечитайте їх під час запуску другого:

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

Крім того, ви можете спробувати завантажити обидва файли в одній команді, і я думаю, що вони будуть використовувати однакові файли cookie.


Це дивно, тому що коли я це намагаюся, він не працює, оскільки файл cookie, що зберігається в ньому, somefileмістить параметр шляху ( /aв даному випадку) і не пересилається на другий виклик. Якщо я відредагую файли cookie у файлі і поставлю лише косу рису, він працює (cookie пересилається на другий виклик). Чи знаєте ви, чи можна запобігти збереженню шляху у файлі cookie?
рüффп

124

Також ви можете увійти через браузер і отримати команду з усіма заголовками, включаючи файли cookie:

Відкрийте вкладку Мережа Інструменти для розробників, увійдіть, перейдіть на потрібну сторінку, використовуйте «Скопіювати як курс».

скріншот


12
Це глибока відповідь! Він не відповідає безпосередньо на питання, бо показує, як на нього відповісти.
bgStack15

5
це одна з найкорисніших відповідей. Це дійсно дозволяє спостерігати та розуміти навіть багатоступеневу автентифікацію.
П’єр Д

Я не знав про цю особливість, поховану в тих дивовижних інструментах. Супер корисно!
Тімоті К. Куінн

52

Після деякого гугла я виявив таке:

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

Поняття не має, якщо це працює, але це може привести вас у правильному напрямку.


9
Це спрацює, якщо у вас є веб-сайт, який очікує надсилання форми. Вам потрібно буде подивитися джерело та знайти зображення <form> і побачити, як називається поля та яку URL-адресу потрібно опублікувати. Ви можете використовувати налагоджувач веб-браузера для пошуку запиту на публікацію, щоб побачити, що надсилається. Це трохи простіше.
stonefury

0

Моя відповідь є модою деяких попередніх відповідей від @JoeMills та @user.

  1. Отримайте cURLкоманду для входу в сервер:

    • Завантажте сторінку входу на веб-сайт та відкрийте Мережеву панель Інструментів для розробників
      • На сторінці Firefox клацніть правою кнопкою миші, виберіть "Оглянути елемент (Q)" та натисніть на вкладку Мережа
    • Перейдіть до форми для входу, введіть ім’я користувача, пароль та увійдіть
    • Після входу в систему поверніться до панелі мережі та прокрутіть доверху, щоб знайти запис POST. Клацніть правою кнопкою миші та виберіть Copy -> Copy as CURL
    • Вставте це в текстовий редактор і спробуйте це в командному рядку, щоб перевірити, чи працює він
      • Можливо, що на деяких сайтах є загартовування, що блокує цей тип підробки для входу в систему, що потребує додаткових кроків нижче, щоб обійти.
  2. Змініть команду cURL, щоб мати можливість зберігати cookie сеансу після входу

    • Видаліть запис -H 'Cookie: <somestuff>'
    • Додати після curlпочатку-c login_cookie.txt
    • Спробуйте запустити цю оновлену команду curl, і вам слід отримати новий файл 'login_cookie.txt'у тій же папці
  3. Зателефонуйте на нову веб-сторінку за допомогою цього нового файлу cookie, який вимагає входу в систему

    • curl -b login_cookie.txt <url_that_requires_log_in>

Я спробував це на Ubuntu 20.04, і це працює як шарм.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.