Diam Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 Читал всякие статейки про взлом IPBи пришёл к выводу, что чаще всего тырят хэши паролей из кукисов,а потом их расшифровывают. Зачем - понятно Если же расшифровать не получается, то этот хэш всовывают в свои кукисы.Тоже понятно зачем Обладатели двоек могут частично спать спокойно - там у них соль есть в паролях ,да двойной md5 - так что подобрать посложнее.А у 1.3 хэши паролей прикрыты одинарным md5 - расшифровывай - не хочу Решил эту ситуацию поправить ============================= Работает на PHP 4.3. и вышеЕсли версия PHP младше: sha1 замените на md5Вместо "PREFIX" можно (да и нужно) вписывать какое-либо СВОЁ слово или комбинацию Открываем Login.phpищем $std->my_setcookie("pass_hash" , $password, 1);и заменяем на$std->my_setcookie("pass_hash" , sha1("PREFIX".$password."substr($ibforums->input['IP_ADDRESS'])"), 1); Открываем functions.phpищем if ($this->member['password'] == $cookie['pass_hash'])заменяем наif (sha1("PREFIX".$this->member['password']."substr($ibforums->input['IP_ADDRESS'])") == $cookie['pass_hash']) Открываем Register.phpищем$std->my_setcookie("pass_hash" , $member['password'], 1);меняем на$std->my_setcookie("pass_hash" , sha1("PREFIX".$member['password']."substr($ibforums->input['IP_ADDRESS'])"), 1);ищем снова и заменяем - таких строчек три. замените все. ищем$std->my_setcookie("pass_hash" , $new_pass , 1);заменяем на$std->my_setcookie("pass_hash" , sha1("PREFIX".$new_pass."substr($ibforums->input['IP_ADDRESS'])"), 1); ================================= Что мы сделали?Мы усложнили хэш пароля.Теперь он зависит ещё и от префикса и от IP пользователя.Использовали функцию sha1 - чтобы сделать хэш длинее,да и вроде sha1 пока не разбирается так легко, как md5,а может у меня паранойя просто И, благодаря тому, что хэш пароля зависит от IP,то злобный хакер даже украв и подменив кукисы,вместо того, чтобы похозяйничать, попадёт на страницу авторизации(потеряет сессию). Что плохого:пользователи на диал-апе будут вынуждены логиниться гораздо чаще ================================== А теперь, господа корифеи,бейте меня ногами, тыкайте носом в дыры и т.д.Так как программёром я никогда не был (и, видимо, не буду) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 ИМХО надо сделать просто также как в двойке ?Чем делать ту же ж только вид сбоку ? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Diam Опубликовано 1 Декабря 2005 Автор Жалоба Поделиться Опубликовано 1 Декабря 2005 Song, может и так, но вот на что у меня ума хватило,то и написал а в двойке есть привязка к IP ?Или такая привязка не нужна? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Mitos Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 привязка к IP значит пользователи модемов, у которых он каждый конект разный, это наверняка оценят Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ImUgh Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 ИМХО надо сделать просто также как в двойке ?а как сделано в двойке? не качать же мне ради этого варезный дистрибутив, чтобы выяснять.может напишет кто? Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 секрет =)а то тут хакеров недорезанных много.. >> не качать же мне ради этого варезный дистрибутив, чтобы выяснять.а он зендом закодированный, так что не выяснишь ) Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
ImUgh Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 секрета в ПМ не расскажешь? а он зендом закодированный, так что не выяснишьварезный то? это врядли Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Diam Опубликовано 1 Декабря 2005 Автор Жалоба Поделиться Опубликовано 1 Декабря 2005 Господа,а никто не подскажет,как из этой строчкиsubstr($ibforums->input['IP_ADDRESS'])срезать парочку последних символов,а то на диал-апе слишком уж весело Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Song Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 $ibforums->input['IP_ADDRESS'] = substr($ibforums->input['IP_ADDRESS'],0,strlen($ibforums->input['IP_ADDRESS']) - 2); Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Mitos Опубликовано 1 Декабря 2005 Жалоба Поделиться Опубликовано 1 Декабря 2005 юзер меняет провайдера и веселье ему продолжается Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Diam Опубликовано 2 Декабря 2005 Автор Жалоба Поделиться Опубликовано 2 Декабря 2005 Song, спасибо.Mitos, твоя нелюбовь к привязке по IP понятна,но это же в какой-то мере защищает от подмены кукисов,так что тут стандартный конфликт "безопасность-юзабельность" А теперь, для тех, кто страдает ещё более сильной параноей, чем я выкладывается Защита Хэшей Пароля для 1.3. с использованием алгоритма SHA-256 Модификация ставится поверх предыдущей.Нижеприведённый код вставляем в Login.php, functions.php, Register.phpпочти в самый конец файлов перед строкой?> /* A PHP port of JavaScript implementation of the Secure Hash Algorithm, SHA-256 * Version 0.3 Copyright Angel Marin 2003-2004 - http://anmar.eu.org/ * Distributed under the BSD License * Some bits taken from Paul Johnston's SHA-1 implementation * Ported by Vladimir Lukianov (vladimir@lukianov.ru) 2005 * recieved from http://lvm.converters.ru * */ function zeroFill($a, $b) { $z = hexdec(80000000); if ($z & $a) { $a >>= 1; $a &= (~$z); $a |= 0x40000000; $a >>= ($b-1); } else { $a >>= $b; } return $a; } function safe_add ($x,$y) { $lsw = ($x & 0xFFFF) + ($y & 0xFFFF); $msw = ($x >> 16) + ($y >> 16) + ($lsw >> 16); return ($msw << 16) | ($lsw & 0xFFFF); } function S ($X, $n) {return ( zeroFill($X, $n) ) | ($X << (32 - $n));} function R ($X, $n) {return ( zeroFill($X, $n) );} function Ch($x, $y, $z) {return (($x & $y) ^ ((~$x) & $z));} function Maj($x, $y, $z) {return (($x & $y) ^ ($x & $z) ^ ($y & $z));} function Sigma0256($x) {return (S($x, 2) ^ S($x, 13) ^ S($x, 22));} function Sigma1256($x) {return (S($x, 6) ^ S($x, 11) ^ S($x, 25));} function Gamma0256($x) {return (S($x, 7) ^ S($x, 18) ^ R($x, 3));} function Gamma1256($x) {return (S($x, 17) ^ S($x, 19) ^ R($x, 10));} function core_sha256 ($m, $l) { $K = Array(0x428A2F98,0x71374491,0xB5C0FBCF,0xE9B5DBA5,0x3956C25B,0x59F111F1,0x923F82A4 ,0xAB1C5ED5,0xD807AA98,0x12835B01,0x243185BE,0x550C7DC3,0x72BE5D74,0x80DEB1FE,0x 9 BDC06A7,0xC19BF174,0xE49B69C1,0xEFBE4786,0xFC19DC6,0x240CA1CC,0x2DE92C6F,0x4A748 4 AA,0x5CB0A9DC,0x76F988DA,0x983E5152,0xA831C66D,0xB00327C8,0xBF597FC7,0xC6E00BF3, 0 xD5A79147,0x6CA6351,0x14292967,0x27B70A85,0x2E1B2138,0x4D2C6DFC,0x53380D13,0x650 A 7354,0x766A0ABB,0x81C2C92E,0x92722C85,0xA2BFE8A1,0xA81A664B,0xC24B8B70,0xC76C51A 3 ,0xD192E819,0xD6990624,0xF40E3585,0x106AA070,0x19A4C116,0x1E376C08,0x2748774C,0x 3 4B0BCB5,0x391C0CB3,0x4ED8AA4A,0x5B9CCA4F,0x682E6FF3,0x748F82EE,0x78A5636F,0x84C8 7 814,0x8CC70208,0x90BEFFFA,0xA4506CEB,0xBEF9A3F7,0xC67178F2); $HASH = Array(0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19); $W = array_fill(0,64,0); $a=0;$b=0;$c=0;$d=0;$e=0;$f=0;$g=0;$h=0;$i=0;$j=0; $T1=0;$T2=0; /* append padding */ $m[$l >> 5] |= 0x80 << (24 - $l % 32); $m[(($l + 64 >> 9) << 4) + 15] = $l; for ( $i = 0; $i<count($m); $i+=16 ) { $a = $HASH[0]; $b = $HASH[1]; $c = $HASH[2]; $d = $HASH[3]; $e = $HASH[4]; $f = $HASH[5]; $g = $HASH[6]; $h = $HASH[7]; for ( $j = 0; $j<64; $j++) { if ($j < 16) $W[$j] = $m[$j + $i]; else $W[$j] = safe_add(safe_add(safe_add(Gamma1256($W[$j - 2]), $W[$j - 7]), Gamma0256($W[$j - 15])), $W[$j - 16]); $T1 = safe_add(safe_add(safe_add(safe_add($h, Sigma1256($e)), Ch($e, $f, $g)), $K[$j]), $W[$j]); $T2 = safe_add(Sigma0256($a), Maj($a, $b, $c)); $h = $g; $g = $f; $f = $e; $e = safe_add($d, $T1); $d = $c; $c = $b; $b = $a; $a = safe_add($T1, $T2); } $HASH[0] = safe_add($a, $HASH[0]); $HASH[1] = safe_add($b, $HASH[1]); $HASH[2] = safe_add($c, $HASH[2]); $HASH[3] = safe_add($d, $HASH[3]); $HASH[4] = safe_add($e, $HASH[4]); $HASH[5] = safe_add($f, $HASH[5]); $HASH[6] = safe_add($g, $HASH[6]); $HASH[7] = safe_add($h, $HASH[7]); } return $HASH; } function str2binb ($str, $chrsz) { $bin = array_fill(0, ((strlen($str)*$chrsz + 64 >> 9) << 4) + 16 ,0); $mask = (1 << $chrsz) - 1; for($i = 0; $i < strlen($str)* $chrsz; $i += $chrsz){ $charCode = ord($str[$i / $chrsz]); $bin[$i>>5] |= ($charCode & $mask) << (24 - $i%32); } return $bin; } function binb2hex ($binarray) { $hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ $hex_tab = $hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; $str = ""; for ($i = 0; $i < count($binarray)* 4; $i++) { $str .= $hex_tab[($binarray[$i>>2] >> ((3 - $i%4)*8+4)) & 0xF].$hex_tab[($binarray[$i>>2] >> ((3 - $i%4)*8 )) & 0xF]; } return $str; } function hex_sha256($s){ $chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ return binb2hex(core_sha256(str2binb($s, $chrsz),strlen($s) * $chrsz)); } И затем,в файлах Login.php, functions.php, Register.php меняем все sha1 на hex_sha256. =============================== Хоть это и шутка но шутка работоспобная,да и может кому имплементация sha-256 на PHP пригодится. Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
M-K Опубликовано 18 Февраля 2007 Жалоба Поделиться Опубликовано 18 Февраля 2007 Вот скажите мне пожалуйста. Первый, второй способ лучше применить, или оба? И в чем заключается защита. Прошу, кому не лень, объяснить мне Цитата Ссылка на комментарий Поделиться на других сайтах Прочее
Рекомендуемые сообщения
Присоединиться к обсуждению
Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.