Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: сети
Войти
Регистрация
Восстановить пароль
 
Mep3avec
2 / 2 / 0
Регистрация: 09.01.2018
Сообщений: 41
1

Csrf-token и авторизация

13.08.2018, 04:20. Просмотров 84. Ответов 1

Всем привет. Пытаюсь зайти на редит авторизованным но имею проблему с csrf-token'ом . Вот собственно код:

Обрабатываем страницу curl'ом
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function request ( $url, $postdata = null, $cookiefile = 'libs/cookie.txt' ){
 
 
    $ch = curl_init($url);
 
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36');
    curl_setopt( $ch, CURLOPT_HEADER, true );
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
 
    curl_setopt( $ch, CURLOPT_COOKIEJAR, $cookiefile );
    curl_setopt( $ch, CURLOPT_COOKIEFILE, $cookiefile );
 
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
 
    if ( $postdata ){
 
        curl_setopt( $ch, CURLOPT_POSTFIELDS,$postdata );
    }
 
    $html = curl_exec( $ch );
    curl_close($ch);
   return $html;
 
}
 
file_put_contents('libs/cookie.txt', '');
Граббим csrf-token чтоб вставить в POST

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$html = request('https://www.reddit.com/login');
 
 
$doc = new DOMDocument;
$doc->preserveWhiteSpace = false;
@$doc->loadHTML($html);
 
$xpath = new DOMXPath($doc);
$products = $xpath->query("//form[@class='AnimatedForm']/input[2]");
 
foreach ($products as $row){
   $crf = $row->getAttribute('value');
    echo $crf. '</br>';
}
 
$post = [
    'csrf_token' => $crf,
    'otp' => '',
    'password' => 'password',
    'dest' => 'https://www.reddit.com',
    'username' => 'username'
 
];
А дальше такой вот код, но

PHP
1
2
3
4
5
6
7
8
$html2 = request('https://www.reddit.com/login', $post);//на этом моменте не работает
print_r($html2)
 
$doc2 = new DOMDocument;
 
@$doc2->loadHTML($html2);
$xpath2 = new DOMXPath($doc2);
$finals = $xpath2->query(".//*[@id='t3_96oj0k']/div/div/div/div/span/a/h2/text()");
То есть не принимает токен , с чем это может быть связано?
С тем что я создаю каждый раз экземпляр curl'a?
Вообщем подскажите что с этим можно сделать , заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.08.2018, 04:20
Ответы с готовыми решениями:

CSRF атака
Здравствуйте. Хотел бы узнать, есть ли такая программа чтоб проверить сайт на...

Php, csrf
Здравствуйте. такой вопрос.. нужно поставить csrf token-ы на все ,скажем так,...

CSRF token
Доброго времени суток! Изучаю csrf, и не могу понять одну вещь, помогите...

Spring security Invalid CSRF Token
Всем привет. Подскажите пожалуйста с чем связана эта ошибка и какие есть...

Ошибка "CSRF token missing or incorrect" при передаче информации в форме
Вообщем создал я модели(не суть важно какие). Через админку добавил группу...

1
Mep3avec
2 / 2 / 0
Регистрация: 09.01.2018
Сообщений: 41
14.08.2018, 22:42  [ТС] 2
Вопрос решён . Ответ : я создавал 2й экземпляр curl'a до того как POSTил данные , следовательно токен менялся .
Ну и код
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
$cookiefile = 'libs/cookie.txt';
 
$curl = curl_init();
curl_setopt($curl, CURLOPT_COOKIESESSION, true);
curl_setopt($curl, CURLOPT_COOKIEFILE, $cookiefile);
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookiefile );
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
curl_setopt($curl, CURLOPT_URL, 'https://www.reddit.com/login');
$html = curl_exec($curl);
 
preg_match('/<input type="hidden" name="csrf_token" value="(.*)"/Uis',$html, $login_csrf);
 
$csrf = $login_csrf[1];
 
//print_r($csrf);
 
$post = [
    'csrf_token' => $csrf ,
    'otp' => '',
    'password' => 'password',
    'dest' => 'https://www.reddit.com',
    'username' => 'username'
 
];
 
curl_setopt($curl, CURLOPT_URL, 'https://www.reddit.com/login');
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
$html = curl_exec($curl);
Дальше в принципе можно закрывать экземпляр сессия то у на есть , ибо у меня если дальше и шло на главную авторизованным то страницу не находило .Выглядело так
Csrf-token и авторизация
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.08.2018, 22:42

Авторизация не работает при включенной CSRF защите Spring Security
Здравствуйте вот столкнулся с такой проблемой при попытке авторизации получал...

Ошибка при разборе запроса. [ Token line number = 1,Token line offset = 26,Token in error = Наименование ]
Доброго времени суток, никак не пойму в чем проблема. using System; using...

Django csrf cookie --нужно определить в чем ошибка CSRF cookie not set
НУжна помощь в определений ошибки как исправить в папке Templates находится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru