Получите доступ к странице aspx (microsoft TMG), где для входа требуется PHP - PullRequest
1 голос
/ 25 сентября 2011

Я пытаюсь почистить портал моего университета, получить расписание и преобразовать его в более удобный для меня формат.

У меня есть следующий скрипт, который выполняет все, что ему нужно, он отправляетнесколько полей POST вместе со списком COOKIES, которые я заметил, когда просматривал заголовок http страницы, которую я пытаюсь очистить.

Но я что-то упускаю, потому что на самом деле ничего не происходит.CURL выводит форму входа, а не страницу входа, так что почему-то они знают, что это не браузер.Могу ли я попробовать что-нибудь еще?Это веб-сайт, который я пытаюсь обернуть: http://bit.ly/qPw7GI Я понял от некоторых других пользователей SO, что он не работает, поэтому доступ к определенным людям / регионам может быть заблокирован ...

Так что здесьэто код:

<?php
$ch = curl_init();

$cookies = array(
"cookieTest" => array("1",false),
"footerState" => array("Opened",false),
"AgendaItemQuery" => array("awful long text",false),
"NewsItemQuery" => array("awful long text",false),
"__utmz" => array("54297527.1317285611.5.4",false),
"__utmc" => array("54297527",false),
"__utma" => array("54297527.718718666.1317031434.1317157254.1317285611.5",false),
"groupRedirect" => array("Prestudent",false),
"WSS_KeepSessionAuthenticated" => array("{4d251e6e-2e82-4e61-bbd4-b10d12fc0015}",false),
"ASP.NET_SessionId" => array("4uyncl55mqyvvi55ab0rw345",true),
"lcid" => array("1033",false),
"ISAWPLB{13EA2B4B-9F2F-431A-A10D-C391C5A474A4}" => array("{4CD6D24F-EB82-4B2F-B2A2-6C3E24372FED}",true),
"lcidFromProfile" => array("1033",false),
"loginName" => array("i:0#.w|vu\username",false)
);

$jar = "";
    foreach($cookies as $cookie => $value){
        $c = explode("=", $cookie);
        $ckey = $c[0];

        if($d = explode(";", $value[0])){
            $cval = $value[0];
        } else {
            $cval = $value[0];
        }


        $cval = trim(preg_replace('/\s+/', '', $cval));
        $cval = urlencode($cval);

        $jar .= $ckey."=".$cval."; ";
    }



curl_setopt($ch, CURLOPT_URL, "https://website/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=9");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIE, $jar);
//curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_POST, true);
$useragent="Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);


$data = array(
    'username' => 'username',
    'password' => '********',
    'curl' => 'Z2FPagesZ2Fschedule.aspx',
    'flags' => '0',
    'forcedownlevel' => '0',
    'formdir' => '9',
    'trusted' => '0',
    'SubmitCreds' => 'Log On'
);

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$output = curl_exec($ch);

print_r($output);
?>

Ответы [ 3 ]

1 голос
/ 30 сентября 2011

Мне кажется, что URL, на который вы отправляете сообщение, неверен. Форма отправляется на https://website/CookieAuth.dll?Logon, а не https://website/CookieAuth.dll?GetLogon?curl=Z2F&reason=0&formdir=9. Я попробую этот URL и посмотрю, что вы получите.

1 голос
/ 25 сентября 2011

Несколько вещей приходят на ум.

У вас есть учетные данные, предоставляющие вам доступ к сайту? Вам необходимо пройти процесс аутентификации сайта. Он может использовать федеративного провайдера идентификации, и в этом случае вам нужно будет иметь дело с процессом установления связи между TMG и провайдером идентификации. Однако по ссылке это выглядит как простая проверка подлинности форм. В этом случае вам нужно создать HTTP-пост, который сопоставляет данные из формы (с учетными данными) и отправить их.

Тот факт, что он использует HTTPS, не помешает вам реализовать клиент, который входит в систему и очищает содержимое. HTTPS обеспечивает целостность и конфиденциальность передачи данных. Ваша ошибка вызвана тем, что веб-сайт требует от вас аутентификации.

Однако больше всего беспокоит то, что вы, очевидно, пытаетесь собрать данные с сайта, который был намеренно защищен, но, похоже, вы мало что знаете об этом. Это подсказывает мне, что вы не имеете права очищать сайт?

Вы связались с владельцем сайта и попросили его помочь?

Edit:

Мой совет - не пытаться напрямую обращаться с куки-файлами аутентификации, поскольку они сознательно затрудняют это!

Используйте свои учетные данные и создайте HTTP-пост, который вы отправляете на сайт, как если бы он был настоящим пользователем. После проверки подлинности вам необходимо обработать файлы cookie, возвращенные с сайта, и убедиться, что они отправляются при последующих запросах к сайту.

Учитывая, что они используют TMG, ваш университет может иметь дополнительные средства контроля над тем, какие типы клиентов могут подключаться. Если это так, вам, возможно, понадобится подумать о том, как симулировать реальное устройство конечного пользователя (что может включать запуск некоторого Javascript или другого активного контента). В этом случае вам может оказаться проще автоматизировать взаимодействие через браузер, но это добавит целый новый уровень сложности.

0 голосов
/ 02 октября 2011

На мой взгляд, следующие должны работать:

Откройте форму входа в систему в своем браузере, посмотрите исходный код и проверьте все поля внутри формы.Там могут быть некоторые скрытые поля, что-то вроде «хэш» - нет гарантии, что POST был сделан реальным пользователем, который открыл страницу входа в систему.Поэтому, если есть какие-либо другие поля, кроме логина / пароля, ваш скрипт должен реализовывать следующую логику:

  1. Получить страницу входа, получить значения из всех скрытых полей.Например, если есть скрытое поле <input type="hidden" name="hash" value="abcde" />, то ваш скрипт должен запомнить это значение (а также ключ "хэш").

  2. Отправьте запрос POST для входа в системудействие формы, включая поля учетных данных и все скрытые поля и их значения.Это может выглядеть так: array('login' => 'your login', 'password' => 'your password', 'hash' => 'abcde')

  3. Получите все куки, которые вы получили после этого POST, и используйте их каждый раз, когда ваш скрипт запрашивает какие-либо страницы.

Также вы можете добавить заголовок 'user-agent' ко всем заголовкам запросов, которые отправляет ваш скрипт (на случай, если на сайте есть дополнительная проверка).Установите реальное значение, например «Mozilla / 5.0 (X11; Linux i686) AppleWebKit / 535.1 (KHTML, как Gecko) Chrome / 14.0.835.186 Safari / 535.1»

Надеюсь, это поможет, если у вас есть какие-либо вопросыне стесняйтесь спрашивать в комментариях.

...