Parašė BloodKiller· 2008 Lie. 13 01:07:30
#1
Standartinis sausainėlis
PHP-Fusion sistemoje yra kažkas panašaus į tai:
fusion_user=1.872ab031e6d4f347fd996aaabfd0ecb7
Na o nenorėtumėte, kad jūsų
fusion_user atrodytų taip?
fusion_user=86dd43a66aae4170666177d8a57a80a1.872ab031e6d4f347fd996aaabfd0ecb7
Kuo tai geriau būtų? Kol kas dar nežinom, nes neaišku, kas per daiktas yra tas šifras vietoj
1. Na bet nuosekliai nagrinėdami straipsnį, jūs tai puikiai surpasite. :)
ALTER TABLE {prefix}users ADD special_id VARCHAR(255) NOT NULL AFTER user_status;
Dabar atsidarę register.php, susiraskite šią eilutę:
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status) VALUES('".$user_info['user_name']."', '".$user_info['user_password']."', '".$user_info['user_email']."', '".$user_info['user_hide_email']."', '', '0000-00-00', '', '', '', '', '', 'Default', '0', '', '', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '$activation')");
ir ją pakeiskite į:
$spec_id = md5(sha1(mt_rand()+time()).microtime());
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status, special_id) VALUES('".$user_info['user_name']."', '".$user_info['user_password']."', '".$user_info['user_email']."', '".$user_info['user_hide_email']."', '', '0000-00-00', '', '', '', '', '', 'Default', '0', '', '', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '$activation','$spec_id')");
Tada tame pačiame faile suraskite šią eilutę:
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status) VALUES('$username', '".md5(md5($password1))."', '".$email."', '$user_hide_email', '$user_location', '$user_birthdate', '$user_aim', '$user_icq', '$user_msn', '$user_yahoo', '$user_web', '$user_theme', '$user_offset', '', '$user_sig', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '$activation')");
ją pakeiskite į:
$spec_id = md5(microtime().sha1(mt_rand()+time()));
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status, special_id) VALUES('$username', '".md5(md5($password1))."', '".$email."', '$user_hide_email', '$user_location', '$user_birthdate', '$user_aim', '$user_icq', '$user_msn', '$user_yahoo', '$user_web', '$user_theme', '$user_offset', '', '$user_sig', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '$activation','$spec_id')");
register.php sutvarkytas. Dabar atsidarykite administration/members.php ir susiraskite šią eilutę:
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status) VALUES ('$username', '".md5(md5($_POST['password1']))."', '$email', '$hide_email', '', '0000-00-00', '', '', '', '', '', 'Default', '0', '', '', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '0')");
ją pakeiskite į:
$spec_id = md5(microtime().sha1(mt_rand()+mt_rand(1,2)*time()));
$result = dbquery("INSERT INTO ".$db_prefix."users (user_name, user_password, user_email, user_hide_email, user_location, user_birthdate, user_aim, user_icq, user_msn, user_yahoo, user_web, user_theme, user_offset, user_avatar, user_sig, user_posts, user_joined, user_lastvisit, user_ip, user_rights, user_groups, user_level, user_status, special_id) VALUES ('$username', '".md5(md5($_POST['password1']))."', '$email', '$hide_email', '', '0000-00-00', '', '', '', '', '', 'Default', '0', '', '', '0', '".time()."', '0', '".USER_IP."', '', '', '101', '0', '$spec_id')");
Po šio pakeitimo atsidarykite maincore.php failą ir susiraskite:
$cookie_value = $data['user_id'].".".$user_pass;
tai pakeiskite į:
$cookie_value = $data['special_id'].".".$user_pass;
Dabar tame pačiame faile suraskite šią eilutę:
$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE user_id='$cookie_1' AND user_password='".md5($cookie_2)."'");
ir ją pakeiskite į:
$result = dbquery("SELECT * FROM ".$db_prefix."users WHERE special_id='$cookie_1' AND user_password='".md5($cookie_2)."'");
Po to suraskite šią eilutę:
$cookie_1 = isNum($cookie_vars['0']) ? $cookie_vars['0'] : "0";
ir ją pakeiskite į:
$cookie_1 = isset($cookie_vars['0']) && preg_match("/^[a-z0-9]+$/i",$cookie_vars['0']) ? $cookie_vars['0'] : "0";
BAIGTA. :)
Dabar išsamiai aš jums paaiškinsiu, kuo tai geriau nei paprastas ID. Matote, kai yra paprastas ID, per ciklines socket užklausas lengviau vykdyti bruteforce ataką, spėliojant vartotojų ID nei jų special_id, kurio niekas visiškai nežino ir net negali numatyti, nes jis niekur nėra skelbiamas, priešingai nei paprastas vartotojo ID - jis yra sugeneruojamas ir suteikiamas visiems skirtingas. Tokiu būdu yra visiškai užkertamas kelias bruteforce atakoms per sausainėlius.
P.S. Jeigu kils problemų, rašykite čia, nes šitos sistemos neištestavau visu 100%, tad gali būti nesklandumų.