Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.02.2014, 10:19   #1
labron
 
Регистрация: 05.02.2014
Сообщений: 9
Печаль 403 csrf

Огромное желание оторвать себе руки

Суть проблемы:
при отправке post запроса на сайт вылетает ошибка 403 с алертом вида CSRF verification failed. Request aborted.

Действия:
Отправляю браузером запрос авторизации на сайте
PHP код:
<form method="post" action="">
<
input type='hidden' name='csrfmiddlewaretoken' value='[COLOR="Red"]>>>токен 32 символа латиница<<<[/COLOR]' />
<
input id="id_username" type="text" name="username" maxlength="50" />
<
input type="password" name="password" id="id_password" />
<
input type="hidden" value="/" name="next">
<
input type="submit" value="Login" class="btn btn-primary">
</
form
запрос браузера:
PHP код:
POST /accounts/login/?next=/ HTTP/1.1
Host
: ***.com
User
-AgentMozilla/5.0 (Windows NT 5.1rv:26.0Gecko/20100101 Firefox/26.0
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://***.com/accounts/login/?next=/
Cookie: django_language=en; csrftoken=[COLOR="Red"]>>>токен 32 символа латиница получен при get страницы с формой<<<[/COLOR]; prelogin=82895c5d518ea1e23b8c9779a8548733; empty_visit_id=1; __utma=14050346.1259481893.1391404381.1391483863.1391579171.3; __utmz=14050346.1391404381.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); location_string="Russian Federation"; countrycode=RU; lon=100.0; lat=60.0; ***session=a38a476ebdc182616edbfd7186145a1e; django_language=en; __utmb=14050346.4.10.1391579171; __utmc=14050346
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 91

csrfmiddlewaretoken=[COLOR="Red"]>>>токен 32 символа латиница получен при get страницы с формой<<<[/COLOR]&username=lalal&password=lalal&next=%2F 
Все нормально получается, запрос отправляется на туже страницу где и форма.

Примечание:
"Баг" с токеном. Если поправить токен ("csrfmiddlewaretoken") в форме на, например, "1" и в куках ("csrftoken") тоже значение "1", то все проходит и в браузере!
Пруф:

PHP код:
POST /accounts/login/?next=/ HTTP/1.1
Host
: ***.com
User
-AgentMozilla/5.0 (Windows NT 5.1rv:26.0Gecko/20100101 Firefox/26.0
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: https://***.com/accounts/login/?next=/
Cookie: django_language=en; csrftoken=1; prelogin=82895c5d518ea1e23b8c9779a8548733; empty_visit_id=1; __utma=14050346.1259481893.1391404381.1391483863.1391579171.3; __utmz=14050346.1391404381.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); location_string="Russian Federation"; countrycode=RU; lon=100.0; lat=60.0; ***session=a38a476ebdc182616edbfd7186145a1e; django_language=en; __utmb=14050346.6.10.1391579171; __utmc=14050346
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 60

csrfmiddlewaretoken=1&username=lalal&password=lalal&next=%2F 
результат:

PHP код:
HTTP/1.1 200 OK 
labron вне форума Ответить с цитированием
Старый 05.02.2014, 10:40   #2
labron
 
Регистрация: 05.02.2014
Сообщений: 9
По умолчанию

Ну а теперь то что заставляет меня ломать заборы, пытаясь выпрямить руки!

C использованием библиотеки синапс пытаюсь все это повторить!
Сперва get запрос, где я получаю куки и токен:
PHP код:
     httpsend:=THTTPsend.Create;
     
cookie:=TStringList.Create;
     
httpsend.UserAgent :=edit2.Text;
     
httpsend.Cookies.Add('prelogin='+edit3.Text); //тут вводится куки чтобы капча мозги не ипла
     
httpsend.HTTPMethod('get','https://***.com/accounts/login/?next=/');
     
cookie.Text:=httpsend.Cookies.Text;
//     cookie[1]:='csrftoken=1';
     
memo2.Text:=cookie.Text//в мемо2 записываются куки с get запроса
     
str:=Copy(httpsend.Cookies.Strings[1], 11length(httpsend.Cookies.Strings[1]));
     
edit1.Text:=str//в едит1 парсится токен с get запроса
     
httpsend.Free
GET запрос пролетает на ура, получаю статус 200, все гуд!

Дальше отправляю POST запрос:
PHP код:
     memo1.Clear;
     
httpsend1:=THTTPsend.Create;
     
httpsend1.MimeType:='application/x-www-form-urlencoded';
     
httpsend1.Protocol:='1.1';
     
httpsend1.UserAgent :='Mozilla/5.0 (Windows NT 5.1; rv:26.0) Gecko/20100101 Firefox/26.0';

     
httpsend1.Cookies.Text:=memo2.Text//вставляю все куки с get запроса
//     httpsend.Cookies.Text:=cookie.Text;
     
httpsend1.Headers.Add('Referer: https://***.com/accounts/login/?next=/');
//     httpsend.Headers.Add('Cookie: prelogin=9af075cd90dd75e9505797e44109ace5;csrftoken=1');
     
Data1 := 'username=lol&password=3&csrfmiddlewaretoken='+edit1.Text// вставляю отпарсеный токен
     
httpsend1.Document.Write(Pointer(Data1)^, Length(Data1));
     
httpsend1.HTTPMethod('post','https://***.com/accounts/login/');
     
memo1.Lines.LoadFromStream(httpsend1.Document);
     
httpsend1.Free
сниффер показывает:

отправил:
PHP код:
GET /accounts/login/?next=/ HTTP/1.0
Host
: ***.com:443
Keep
-Alive300
Connection
keep-alive
Cookie
prelogin=82895c5d518ea1e23b8c9779a8548733 
получил:
PHP код:
HTTP/1.1 200 OK
Date
Wed05 Feb 2014 05:47:37 GMT
Server
Apache/2.2.22 (Ubuntu)
VaryAccept-Language,Cookie,Accept-Encoding
X
-Frame-OptionsDENY
Strict
-Transport-Securitymax-age=31536000
Content
-Languageen
Set
-Cookie:  csrftoken=NKaqDLEAPvN7Pq8JGdAuUHLLFoDwM6Q9expires=Wed04-Feb-2015 05:47:37 GMTMax-Age=31449600Path=/
Set-Cookie:  empty_visit_id=1expires=Thu05-Feb-2015 05:47:37 GMTMax-Age=31536000Path=/
Set-Cookie:  ***session=6e1fb16dbcba9583f5f67e29403f6e17Domain=***.comexpires=Wed05-Feb-2014 11:47:37 GMThttponlyMax-Age=21600Path=/
Set-Cookie:  django_language=en
Connection
close
Content
-Typetext/htmlcharset=utf-
все вроде нормально...
дальше отправляю post запрос
PHP код:
POST /accounts/loginHTTP/1.1
Host
: ***.com:443
Keep
-Alive300
Connection
keep-alive
Cookie
prelogin=82895c5d518ea1e23b8c9779a8548733csrftoken=NKaqDLEAPvN7Pq8JGdAuUHLLFoDwM6Q9empty_visit_id=1; ***session=6e1fb16dbcba9583f5f67e29403f6e17django_language=en
User
-AgentMozilla/5.0 (Windows NT 5.1rv:26.0Gecko/20100101 Firefox/26.0
Content
-Typeapplication/x-www-form-urlencoded
Content
-Length76
Referer
https://***.com/accounts/login/?next=/

username=lol&password=3&csrfmiddlewaretoken=NKaqDLEAPvN7Pq8JGdAuUHLLFoDwM6Q9 
и получаю:
PHP код:
HTTP/1.1 403 FORBIDDEN
Date
Wed05 Feb 2014 05:47:39 GMT
Server
Apache/2.2.22 (Ubuntu)
VaryAccept-Language,Cookie,Accept-Encoding
X
-Frame-OptionsDENY
Strict
-Transport-Securitymax-age=31536000
Content
-Languageen
Set
-Cookie:  ***session=6e1fb16dbcba9583f5f67e29403f6e17Domain=***.comexpires=Wed05-Feb-2014 11:47:39 GMThttponlyMax-Age=21600Path=/
Set-Cookie:  django_language=en
Keep
-Alivetimeout=5max=200
Connection
Keep-Alive
Transfer
-Encodingchunked
Content
-Typetext/html 
в теле кода
CSRF verification failed. Request aborted.

Прошу помощи, работа встала!
labron вне форума Ответить с цитированием
Старый 05.02.2014, 17:19   #3
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

labron, что за сайт? В принципе могу помочь разобраться. Если указываете свои данные, то можете указать их (можно в ЛС)
Lardes вне форума Ответить с цитированием
Старый 05.02.2014, 17:28   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

В HTTP header'е, укажите Referrer поле, от вас это требует сервер)
а ещё это HTTPS соединение.
Человек_Борща вне форума Ответить с цитированием
Старый 05.02.2014, 17:39   #5
labron
 
Регистрация: 05.02.2014
Сообщений: 9
По умолчанию

Lardes, извини, нельзя.
Человек_Борща, расскажи поподробнее про https, насчет реферрер знаю)
labron вне форума Ответить с цитированием
Старый 11.02.2014, 19:50   #6
labron
 
Регистрация: 05.02.2014
Сообщений: 9
По умолчанию

........up
labron вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вызвать ошибку 403 Ale}{ander Свободное общение 8 21.10.2013 23:46
Synapse 403 Forbidden WhiteForge Работа с сетью в Delphi 3 25.10.2012 18:24
Indy. Как обойти ошибку 403. viktorall Работа с сетью в Delphi 2 27.03.2010 00:52
HTTP/1.1 403 Forbidden TwiX Работа с сетью в Delphi 2 18.02.2010 23:18