Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PHP i cURL - co może być nie tak., Autologowanie z poziomu skryptu
Grzesiek23
post
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.12.2009

Ostrzeżenie: (0%)
-----


Potrzebuję napisać skrypt, który będzie się logować do określonej strony.

Strona to: http://www.erepublik.com/en/login (IMG:style_emoticons/default/smile.gif)

Kiedyś napisałem coś takiego w VB, jednak administracja pokombinowała i skrypt nie działa.
W VB brakło mi pomysłów, więc może ktoś w PHP coś pomoże.

Sprawa wygląda tak - wchodząc pierwszy raz na stronę pobierane jest ciastko "erpk". Ciastko to musi zostać wysłane przy logowaniu, a także takie dane jak token (ukryte w formularzu) i oczywiście login i hasło.


Poniżej mój kod:


  1. <?php
  2.  
  3. // This page will set some cookies and we will use them for Posting in Form data.
  4.  
  5. $cookie_file_path = "cookie.txt"; // Please set your Cookie File path
  6.  
  7. $LOGINURL = "http://www.erepublik.com/en/login";
  8. $agent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6";
  9. $ch = curl_init();
  10. curl_setopt($ch, CURLOPT_URL,$LOGINURL);
  11. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  13. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  14. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
  15. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
  16. curl_setopt($ch, CURLOPT_ENCODING, '');
  17. $headers = array('Accept-Language: pl,en-us;q=0.7,en;q=0.3',
  18. 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7',
  19. 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
  20. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  21.  
  22. $result = curl_exec ($ch);
  23. curl_close ($ch);
  24.  
  25. // 2- Post Login Data to Page http://signin.ebay.com/aw-cgi/eBayISAPI.dll
  26.  
  27. $LOGINURL = "http://www.erepublik.com/en/login";
  28. $POSTFIELDS = "_token=6ca821b0c2630712028e90060e2b80c9&citizen_name=username&citizen_password=password&commit=Login";
  29.  
  30. $reffer = "http://www.erepublik.com/en";
  31.  
  32. $ch = curl_init();
  33. curl_setopt($ch, CURLOPT_URL,$LOGINURL);
  34. curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  35. curl_setopt($ch, CURLOPT_POST, 1);
  36. curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS);
  37. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  38. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  39. curl_setopt($ch, CURLOPT_ENCODING, '');
  40. curl_setopt($ch, CURLOPT_REFERER, $reffer);
  41. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path);
  42. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path);
  43. $headers2 = array('Accept-Language: pl,en-us;q=0.7,en;q=0.3',
  44. 'Accept-Charset: ISO-8859-2,utf-8;q=0.7,*;q=0.7',
  45. 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8');
  46. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
  47.  
  48. $result = curl_exec ($ch);
  49. curl_close ($ch);
  50. print $result;
  51.  
  52. $ch = curl_init();
  53.  
  54. ?>



Odpalając go (oczywiście po podstawieniu poprawnego loginu i hasła) otrzymuję komunikat:
"CSRF attack detected".

Doszedłem mniej więcej dlaczego tak się może dziać.

Otóż wchodzimy pierwszy raz na stronę do logowania, następnie usuwam ciastko "erpk" i próbuję się zalogować - wtedy też dostaję taki komunikat.

Wniosek? Ciastka nie są przekazywane w drugim wywołaniu.
Ale dlaczego?

Będzie ktoś mi tutaj w stanie pomóc?

Ten post edytował Grzesiek23 25.12.2009, 15:22:13
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:00