Авторизація на сайті за допомогою curl php - все про web розробці на

Для початку зареєструйтеся на сайті, щоб мати тестові логін-пароль для входу на сайт.

Авторизація на сайті за допомогою curl php - все про web розробці на

"Нутрощі" у неї теж нічим не примітні

Авторизація на сайті за допомогою curl php - все про web розробці на

Бачимо, що форма посилає такі параметри

Спробуємо вирішити задачу в лоб і відправити ці дані простим масивом. Відразу врахуємо, що дані відправляються на захищений ssl url, по протоколу https. Це слід враховувати при відправці даних в cUrl. Розповідати, як працює SSL в рамках даної статті я не стану, скажу лише, що сертифікати, якими обмінюються дві сторони, самі по собі нічого не говорять про його володаря. Вони потрібні лише для того, щоб передати відкритий ключ, по обидва боки і служать для шифрування каналу зв'язку. Тобто ми можемо перевіряти наявність ssl, і підключати сертифікат в cUrl, але це буде служити користь тільки нам, сервер не може дізнатися користуємося ми сертифікатом, або використовуємо незахищений канал зв'язку.

І знову мимо. Звернемо увагу, що форма крім стандартних логіна-пароля, відправляє ще 3 динамічних поля. Дані в них весь час різні і генеруються при оновленні сторінки. Значить, потрібно завантажити сторінку, скопіювати ці дані і проходити аутентифікацію вже з ними. Для цього трохи "облагородимо" код, уклавши запит даних з сервера cUrl'ом в окрему функцію. Всі відміну get запиту від post, полягає в тому, що при пост запиті відправляються дані CURLOPT_POSTFIELDS

Спробуємо висмикнути значення змінних полів

Виявляється, що поле login: j_id_id254.x і поле login: j_id_id254.y створюються і заповнюються js скриптом. Спробуємо залишити їх як були

або писати спочатку на парсер js або розбираємо ручками алгоритм, запевняю вас це не так складно як здається, робив таке і не раз. Наприклад можна запустити сайт в браузері, і подивитися в інспектора розпакований js, що вже сильно полегшить завдання по генерації свого key

Спершу подивіться в інспектора у вкладці мережу / network який запит йде при відправці форми, які там поля є. Якщо є поля які схожі на динамічні, шукайте де сайт їх генерує / отримує, він може їх з сервера запитувати, може сам хитро генерувати. У самому js шукаємо код який відправляє запит - в ньому шукаємо місце де в запит вставляється хитрі параметр, шукаємо вгору по коду, звідки цей параметр прийшов, з форми чи взятий або надісланий з куками. хмара варіантів. швидше за все все простіше і там якась crsf змінна з Хідер, але можуть і задурити, випадки бувають різні)

За принципом регулярних виразів де це регулярка, по якій знаходиться тег form з id = "logout" з прапорами Usi - де U - вимикаємо жадібність, s - ігнор прогалини, i- ігноруємо регістр

тобто якщо взяти логін / пас з коду і зайти під браузером, вбити пошук по артикулу, мало того що результати будуть відрізнятися так ще і вивалюється повідомлення про необхідність реєстрації для отримання актуальних даних.

Голову ламаю 2й день = /

function isAuth ($ data)

curl_setopt ($ ch, CURLOPT_URL, $ url); // відправляємо на

curl_setopt ($ ch, CURLOPT_HEADER, 0); // порожні заголовки

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // повернути те що повернув сервер

curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // слідувати за редирект

curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 30); // таймаут4

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');

curl_setopt ($ ch, CURLOPT_COOKIEFILE, dirname (__ FILE __). '/ cookie.txt');

curl_setopt ($ ch, CURLOPT_POST, 1); // використовувати дані в post

curl_setopt ($ ch, CURLOPT_POSTFIELDS, array (

curl_setopt ($ ch, CURLOPT_HEADER, 0); // порожні заголовки

curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); // повернути те що повернув сервер

curl_setopt ($ ch, CURLOPT_FOLLOWLOCATION, 1); // слідувати за редирект

curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, 30); // таймаут4

curl_setopt ($ ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt ($ ch, CURLOPT_USERAGENT, 'Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)');

curl_setopt ($ ch, CURLOPT_COOKIEFILE, dirname (__ FILE __). '/ cookie.txt');