Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт авторизации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Ilnur
Отправлено: 25 Августа, 2012 - 21:57:53
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Здравствуйте.
Интересует такой вопрос: возможно ли написать скрипт авторизации на сайте steamcommunity.com на php?
На сколько я знаю, пароль там шифруется яваскриптом(rsa).
Логин из формы отправляется на http://steamcommunity[dot]com/login/[dot][dot][dot]y?username=login , после чего мы получаем такие данные:

CODE (htmlphp):
скопировать код в буфер обмена
  1. {"success":true,"publickey_mod":"C49B23FC4D7B6C201D18B2042132C1A1FE5AB1801097761F1196CD16D5F6B4184593D454A259AAFB64D74A3E0773613889101D2BAF58CFB78478B198D58CE99B4BEF3DC154C6E9175B2EDD90A62A2BEE90405F97BD014C912FF44606487ADD6C2888C826F53BD06F71F148C2013EB7090387416DE134A98912D9EF2B471C66D3104877A47D0F13E7C440273215C8C170A69AF8FC7975B6F0A4D1421268E6A6604222718890E12558B20C4F920E43B8BC790518080E7FE30D52990D3EBA1DD6D0C5DE3E48DCC0139FFF05423A6FF29A6E57FF00143031101A19A5D9366DBD9BC166409E79896FE6EA2446D1A167357C7C121E5330D5CE6452373A0F667D16D03F","publickey_exp":"010001","timestamp":"10826500000"}


Затем publickey_mod, timestamp и пароль используются для шифрования яваскриптом:

CODE (javascript):
скопировать код в буфер обмена
  1.                 var form = document.forms['logon'];
  2.  
  3.                 var pubKey = RSA.getPublicKey( results.publickey_mod, results.publickey_exp );
  4.                 var encryptedPassword = RSA.encrypt( form.elements['password'].value, pubKey );
  5.                 new Ajax.Request( 'https://steamcommunity.com/login/dologin/',
  6.                         {
  7.                                 method: 'post',
  8.                                 parameters: {
  9.                                         password: encryptedPassword,
  10.                                         username: form.elements['username'].value,
  11.                                         emailauth: form.elements['emailauth'].value,
  12.                                                                                 captchagid: form.elements['captchagid'].value,
  13.                                         captcha_text: form.elements['captcha_text'].value,
  14.                                         emailsteamid: form.elements['emailsteamid'].value,
  15.                                         rsatimestamp: results.timestamp,
  16.                                         remember_login: form.elements['remember_login'] && form.elements['remember_login'].checked
  17.                                 },
  18.                                 onSuccess: OnLoginResponse,
  19.                                 onException: function( req, e ) { throw e; }
  20.                         }
  21.                 );



CODE (javascript):
скопировать код в буфер обмена
  1. var RSAPublicKey = function($modulus_hex, $encryptionExponent_hex) {
  2.     this.modulus = new BigInteger( $modulus_hex, 16);
  3.     this.encryptionExponent = new BigInteger( $encryptionExponent_hex, 16);
  4. }
  5.  
  6. var Base64 = {
  7.     base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
  8.     encode: function($input) {
  9.         if (!$input) {
  10.             return false;
  11.         }
  12.         var $output = "";
  13.         var $chr1, $chr2, $chr3;
  14.         var $enc1, $enc2, $enc3, $enc4;
  15.         var $i = 0;
  16.         do {
  17.             $chr1 = $input.charCodeAt($i++);
  18.             $chr2 = $input.charCodeAt($i++);
  19.             $chr3 = $input.charCodeAt($i++);
  20.             $enc1 = $chr1 >> 2;
  21.             $enc2 = (($chr1 & 3) << 4) | ($chr2 >> 4);
  22.             $enc3 = (($chr2 & 15) << 2) | ($chr3 >> 6);
  23.             $enc4 = $chr3 & 63;
  24.             if (isNaN($chr2)) $enc3 = $enc4 = 64;
  25.             else if (isNaN($chr3)) $enc4 = 64;
  26.             $output += this.base64.charAt($enc1) + this.base64.charAt($enc2) + this.base64.charAt($enc3) + this.base64.charAt($enc4);
  27.         } while ($i < $input.length);
  28.         return $output;
  29.     },
  30.     decode: function($input) {
  31.         if(!$input) return false;
  32.         $input = $input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
  33.         var $output = "";
  34.         var $enc1, $enc2, $enc3, $enc4;
  35.         var $i = 0;
  36.         do {
  37.             $enc1 = this.base64.indexOf($input.charAt($i++));
  38.             $enc2 = this.base64.indexOf($input.charAt($i++));
  39.             $enc3 = this.base64.indexOf($input.charAt($i++));
  40.             $enc4 = this.base64.indexOf($input.charAt($i++));
  41.             $output += String.fromCharCode(($enc1 << 2) | ($enc2 >> 4));
  42.             if ($enc3 != 64) $output += String.fromCharCode((($enc2 & 15) << 4) | ($enc3 >> 2));
  43.             if ($enc4 != 64) $output += String.fromCharCode((($enc3 & 3) << 6) | $enc4);
  44.         } while ($i < $input.length);
  45.         return $output;
  46.     }
  47. };
  48.  
  49. var Hex = {
  50.     hex: "0123456789abcdef",
  51.     encode: function($input) {
  52.         if(!$input) return false;
  53.         var $output = "";
  54.         var $k;
  55.         var $i = 0;
  56.         do {
  57.             $k = $input.charCodeAt($i++);
  58.             $output += this.hex.charAt(($k >> 4) &0xf) + this.hex.charAt($k & 0xf);
  59.         } while ($i < $input.length);
  60.         return $output;
  61.     },
  62.     decode: function($input) {
  63.         if(!$input) return false;
  64.         $input = $input.replace(/[^0-9abcdef]/g, "");
  65.         var $output = "";
  66.         var $i = 0;
  67.         do {
  68.             $output += String.fromCharCode(((this.hex.indexOf($input.charAt($i++)) << 4) & 0xf0) | (this.hex.indexOf($input.charAt($i++)) & 0xf));
  69.         } while ($i < $input.length);
  70.         return $output;
  71.     }
  72. };
  73.  
  74. var RSA = {
  75.  
  76.     getPublicKey: function( $modulus_hex, $exponent_hex ) {
  77.                 return new RSAPublicKey( $modulus_hex, $exponent_hex );
  78.     },
  79.  
  80.     encrypt: function($data, $pubkey) {
  81.         if (!$pubkey) return false;
  82.         $data = this.pkcs1pad2($data,($pubkey.modulus.bitLength()+7)>>3);
  83.         if(!$data) return false;
  84.         $data = $data.modPowInt($pubkey.encryptionExponent, $pubkey.modulus);
  85.         if(!$data) return false;
  86.         $data = $data.toString(16);
  87.         return Base64.encode(Hex.decode($data));
  88.     },
  89.  
  90.     pkcs1pad2: function($data, $keysize) {
  91.         if($keysize < $data.length + 11)
  92.             return null;
  93.         var $buffer = [];
  94.         var $i = $data.length - 1;
  95.         while($i >= 0 && $keysize > 0)
  96.             $buffer[--$keysize] = $data.charCodeAt($i--);
  97.         $buffer[--$keysize] = 0;
  98.         while($keysize > 2)
  99.             $buffer[--$keysize] = Math.floor(Math.random()*254) + 1;
  100.         $buffer[--$keysize] = 2;
  101.         $buffer[--$keysize] = 0;
  102.         return new BigInteger($buffer);
  103.     }
  104. }
  105.  



Зашифрованный логин, пароль и timestamp отправляются сюда: https://steamcommunity[dot]com/login/dologin/

Т.е надо переписать эту функцию на php.

(Отредактировано автором: 25 Августа, 2012 - 22:17:23)

 
 Top
Мелкий Супермодератор
Отправлено: 25 Августа, 2012 - 22:04:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Вы сами себе уже ответили. Однако


-----
PostgreSQL DBA
 
 Top
Ilnur
Отправлено: 25 Августа, 2012 - 22:18:37
Post Id


Новичок


Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2012  


Помог: 0 раз(а)




Мелкий пишет:
Вы сами себе уже ответили. Однако


Т.е возможно?
 
 Top
Muxa
Отправлено: 25 Августа, 2012 - 23:53:45
Post Id



Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Март 2012  
Откуда: Россия, Тверь


Помог: 5 раз(а)





Ilnur пишет:
Т.е возможно?

нет ничего невозможного в нашем бренном мире..

Почитайте про шифрование паролей вот здесь например http://www.php.net/manual/ru/faq...sswords.fasthash

(Отредактировано автором: 25 Августа, 2012 - 23:54:33)

 
 Top
Мелкий Супермодератор
Отправлено: 26 Августа, 2012 - 09:21:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ilnur пишет:
Т.е возможно?

На PHP можно полностью эмулировать браузер. Вопрос лишь в сложности.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB