[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите обойти авторизацию
d777
Помогите пожалуйста разобраться. Есть интернет-магазин, на котором авторизация происходит при заполнии E-MAIL/LOGIN и PASSWORD, только после этого возможен поиск товара. Как можно в коде PHP авторизироваться. Объясняю: к примеру вот ссылка авторизации http://magazin.com/section/dealer/?section...Submit=%A0OK%A0 где данные передаются методом Post, но мне нужно считать в переменную код html для дальнейшей обработки и вывода на своем сайте уже то что мне нужно, к примеру вот этой страницы http://magazin.com/section/dealer/dealerpa...mp;search=books. Но при подключении к этой страницы, выводится страничка авторизации. Повторяю вопрос, как мне в коде PHP авторизироваться и слизать результаты поиска этой странички в файл. Пробовал функцией fopen(), не получается, стоит защина на сайте

Заранее благодарю



Спустя 5 часов, 49 минут, 14 секунд (3.01.2008 - 23:08) lenich написал(а):
Да все просто. Качайте сниффер помощнее и смотрите траффик сначала просто между браузером и магазином т.е. делаете все в
браузере как обычный пользователь и смотрите что там за траффик. Потом этот траффик эмулируете программно на пхп с помощью сокетов или curl.

Спустя 29 минут, 43 секунды (3.01.2008 - 23:38) d777 написал(а):
Цитата(lenich @ 3.1.2008, 20:08) [snapback]31280[/snapback]
Да все просто. Качайте сниффер помощнее и смотрите траффик сначала просто между браузером и магазином т.е. делаете все в
браузере как обычный пользователь и смотрите что там за траффик. Потом этот траффик эмулируете программно на пхп с помощью сокетов или curl.


Ни когда не пользовался этим зверем rolleyes.gif Нашел следующие: SpyNet - packetstorm.securify.com; Analyzer - neworder.box.sk; IRIS - www.eeye.com; CommView - www.tamos.com. Какой лучше? На что именно мне надо будет обратить внимание?


Спустя 41 минута, 39 секунд (4.01.2008 - 00:20) d777 написал(а):
Цитата(lenich @ 3.1.2008, 20:08) [snapback]31280[/snapback]
Да все просто. Качайте сниффер помощнее и смотрите траффик сначала просто между браузером и магазином т.е. делаете все в
браузере как обычный пользователь и смотрите что там за траффик. Потом этот траффик эмулируете программно на пхп с помощью сокетов или curl.


Че-то я ничего не пойму. Загрузил CommView. Что именно мне смотреть:
- вклдадка IP-соединения. там отображается: Локальный IP, Удаленный IP, Входящие, Исходящие, Направление, Сессии, Порты, Имя хоста, Байт, Процесс. Это наверное не то, думаю надо смотреть следующие
- вкладка Пакеты. там отображается: №, Протокол, МАС-источ., МАС-назн., IP-источн., IP-назн., ...... при выборе из этого списка появляется окошко TCP-сессия, в котором оображается:
GET / HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: magazin.com
Connection: Keep-Alive
Cookie: __utma=243230231.569086310.1198315161.1199388420.1199390402.41; __utmz=243230231.1199380787.39.14.utmccn=(referral)|utmcsr=win.mail.ru|utmcct=/cgi-bin/readmsg|utmcmd=referral; l2_pv8690=3; __utma=140137575.1921305370.1198315187.1198415371.1199311835.5; __utmz=140137575.1199311835.5.4.utmccn=(referral)|utmcsr=magazin.com|utmcct=/section/dealer/|utmcmd=referral

HTTP/1.1 200 OK
Server: nginx/0.5.4
Date: Thu, 03 Jan 2008 20:40:32 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
X-Powered-By: PHP/4.3.11
Last-Modified: Thu, 03 Jan 2008 19:40:32 GMT
Set-Cookie: PHPSESSID=72f864dfc9cfb843e0d4a6913910a5ee; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

ebf
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML> ........
........ и т.д.

Что именно мне надо смотреть и что именно мне надо реализовать в PHP?

Спустя 13 часов, 7 минут (4.01.2008 - 13:27) lenich написал(а):
Ну вообще диалог пхп - браузер построен на http - протоколе. Клиент посылает http - запрос. Пхп формирует http ответ. Как запрос, так и ответ по Http протоколу состоят из хедеров и из данных. Т.е.
Код
Accept-Language: ru
- это хедер. У него название Accept-Language - а значение ru.
Код
<html> .....
в ответе - это уже данные. Но это все вы лучше посмотрите хотя-бы на http://ru.wikipedia.org/wiki/HTTP, а то я так примитвно объясняю.

В вашем случае:

Код
GET / HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: magazin.com
Connection: Keep-Alive
Cookie: __utma=243230231.569086310.1198315161.1199388420.1199390402.41; __utmz=243230231.1199380787.39.14.utmccn=(referral)|utmcsr=win.mail.ru|utmcct=/cgi-bin/readmsg|utmcmd=referral; l2_pv8690=3; __utma=140137575.1921305370.1198315187.1198415371.1199311835.5; __utmz=140137575.1199311835.5.4.utmccn=(referral)|utmcsr=magazin.com|utmcct=/section/dealer/|utmcmd=referral  

Это HTTP запрос на получение главной страницы magazin.com.

--------------------------------------------------------------------------------------

HTTP/1.1 200 OK
Server: nginx/0.5.4
Date: Thu, 03 Jan 2008 20:40:32 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
X-Powered-By: PHP/4.3.11
Last-Modified: Thu, 03 Jan 2008 19:40:32 GMT
Set-Cookie: PHPSESSID=72f864dfc9cfb843e0d4a6913910a5ee; path=/ !!!!!! - эта строка значит , что сервер завел на вас сессию. Эту строку надо запомнить и вставлять в следующий запрос  - так сервер будет считать , что вы прошли авторизацию.
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

<html> .....      - это сервер в ответ на ваш запрос возвращает вам html страницу ( это как я понял страница где авторизироваться надо).


Теперь как это реализовать в пхп?

Код
$fp = fsockopen("magazin.com", 80); // Открываете соединение с magazin.com
fputs($fp, $request); // в $request уже должен хранится ваш http запрос целиком. (т.е. вот вся та куча текста которая начинается с GET / HTTP/1.1 со всеми /r/n - это симоволы перевода каретки - у меня в основном с ними гемор был) )

while(!feof($fp)){
$result .= fgets($fp, 1024);
}
fclose($fp);


Если все прошло нормально, то в $result у вас будет куча текста которая начинается с HTTP/1.1 200 OK. Вы парсите ее забираете оттуда хедер Set-Cookie, чтобы потом вставлять его в свои последующие запросы (посмотрите как это выглядит в CommView).

Ну а дальше вы снова точно также генерите http запрос уже на авторизацию(как будто вы в браузере заполнили поля для авторизации и нажали кнопку) - сервер также пришлет вам результат как будто бы вы авторизировались , и затем вы генерите еще один запрос уже на просмотр данных каких вам надо. (Генерите все сначала в браузере и смотрите через CommView. Особое внимание уделяете хедеру Set-Cookie).

Проделайте всю процедуру сначала просто в браузере(т.е. запрос гл.страницы/авторизация/получение нужной страницы) и потом уже полученные в CommView запросы вбивайте в скрипт.

PS. В CommView надо смотреть Пакеты IP/TCP. Http протокол входит в стек протоколов IP/TCP или как-то так). Мне сия прога лично не понравилась - очень сложно вычленить линейку запросов из той кучи что она показывает. Юзайте лучше IEWatch - плагин к IE - он удобней гораздо.

Спустя 10 часов, 59 минут, 49 секунд (5.01.2008 - 00:27) d777 написал(а):
Цитата(lenich @ 4.1.2008, 10:27) [snapback]31293[/snapback]
Ну вообще диалог пхп - браузер построен на http - протоколе. Клиент посылает http - запрос. Пхп формирует http ответ. Как запрос, так и ответ по Http протоколу состоят из хедеров и из данных. Т.е.
Код
Accept-Language: ru
- это хедер. У него название Accept-Language - а значение ru.
Код
<html> .....
в ответе - это уже данные. Но это все вы лучше посмотрите хотя-бы на http://ru.wikipedia.org/wiki/HTTP, а то я так примитвно объясняю.

В вашем случае:

Код
GET / HTTP/1.1
Accept: */*
Referer:
Accept-Language: ru
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Host: magazin.com
Connection: Keep-Alive
Cookie: __utma=243230231.569086310.1198315161.1199388420.1199390402.41; __utmz=243230231.1199380787.39.14.utmccn=(referral)|utmcsr=win.mail.ru|utmcct=/cgi-bin/readmsg|utmcmd=referral; l2_pv8690=3; __utma=140137575.1921305370.1198315187.1198415371.1199311835.5; __utmz=140137575.1199311835.5.4.utmccn=(referral)|utmcsr=magazin.com|utmcct=/section/dealer/|utmcmd=referral  

Это HTTP запрос на получение главной страницы magazin.com.

--------------------------------------------------------------------------------------

HTTP/1.1 200 OK
Server: nginx/0.5.4
Date: Thu, 03 Jan 2008 20:40:32 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=60
X-Powered-By: PHP/4.3.11
Last-Modified: Thu, 03 Jan 2008 19:40:32 GMT
Set-Cookie: PHPSESSID=72f864dfc9cfb843e0d4a6913910a5ee; path=/ !!!!!! - эта строка значит , что сервер завел на вас сессию. Эту строку надо запомнить и вставлять в следующий запрос  - так сервер будет считать , что вы прошли авторизацию.
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache

<html> .....      - это сервер в ответ на ваш запрос возвращает вам html страницу ( это как я понял страница где авторизироваться надо).


Теперь как это реализовать в пхп?

Код
$fp = fsockopen("magazin.com", 80); // Открываете соединение с magazin.com
fputs($fp, $request); // в $request уже должен хранится ваш http запрос целиком. (т.е. вот вся та куча текста которая начинается с GET / HTTP/1.1 со всеми /r/n - это симоволы перевода каретки - у меня в основном с ними гемор был) )

while(!feof($fp)){
$result .= fgets($fp, 1024);
}
fclose($fp);


Если все прошло нормально, то в $result у вас будет куча текста которая начинается с HTTP/1.1 200 OK. Вы парсите ее забираете оттуда хедер Set-Cookie, чтобы потом вставлять его в свои последующие запросы (посмотрите как это выглядит в CommView).

Ну а дальше вы снова точно также генерите http запрос уже на авторизацию(как будто вы в браузере заполнили поля для авторизации и нажали кнопку) - сервер также пришлет вам результат как будто бы вы авторизировались , и затем вы генерите еще один запрос уже на просмотр данных каких вам надо. (Генерите все сначала в браузере и смотрите через CommView. Особое внимание уделяете хедеру Set-Cookie).

Проделайте всю процедуру сначала просто в браузере(т.е. запрос гл.страницы/авторизация/получение нужной страницы) и потом уже полученные в CommView запросы вбивайте в скрипт.

PS. В CommView надо смотреть Пакеты IP/TCP. Http протокол входит в стек протоколов IP/TCP или как-то так). Мне сия прога лично не понравилась - очень сложно вычленить линейку запросов из той кучи что она показывает. Юзайте лучше IEWatch - плагин к IE - он удобней гораздо.





Большое спасибо, буду пробовать rolleyes.gif
А как мне защитить свой сайт от подобного парсинга?

Спустя 11 часов, 31 минута, 26 секунд (5.01.2008 - 11:58) lenich написал(а):
Вот насчет защиты даж не знаю. Ну наверное стандартное средство - kaptcha (каптча) - мож не правильно написал).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.