Արտահանվող գրանցման մեջ աղի ավելացում
Այսպիսով, դուք արդեն գիտեք, որ հեշավորումը
md5-ի միջոցով անշրջելի գործընթաց է, և հաքերը,
ով ստանում է հեշի հասանելիություն, չի կարողանա
ստանալ գաղտնաբառը այդ հեշից:
Իրականում այս պնդումը լիովին ճիշտ չէ - ներկայումս չար հաքերները կազմել են հանրաճանաչ և ոչ այնքան հանրաճանաչ գաղտնաբառերի հեշերի գրադարաններ, և ցանկացած հիմար կարող է գաղտնաբառը պարզել, պարզապես գուգլելով դրա հեշը:
Խոսքը բավականին պարզ, հանրաճանաչ գաղտնաբառերի մասին է:
Օրինակ, գուգլեք 827ccb0eea8a706c4c34a16891f84e7b հեշը
և անմիջապես Google-ի որոնման արդյունքներում կտեսնեք, որ սա
'12345' գաղտնաբառն է:
Բավականին բարդ գաղտնաբառերի հեշերը այս կերպ հնարավոր չէ պարզել (փորձեք):
Դուք կարող եք հարցնել, թե որտեղի՞ց է այդ դեպքում խնդիրը - ասենք, մենք բոլորս կգրանցվենք բարդ գաղտնաբառերով: Սակայն կա խնդիր - օգտատերերի մեծամասնությունը չի մտածում իրենց տվյալների անվտանգության մասին և կարող է մուտքագրել բավականին պարզ գաղտնաբառեր:
Մենք կարող ենք գրանցման ժամանակ պարտադրել մտածել
ավելի երկար գաղտնաբառեր, սահմանափակելով, օրինակ,
նվազագույն նիշերի քանակը 6-ով
կամ 8-ով, սակայն, այնուամենայնիվ, կհայտնվեն
'123456' կամ '12345678' տիպի գաղտնաբառեր:
Կարելի է, իհարկե, մտածել ավելի խելացի ալգորիթմ գաղտնաբառի բարդությունը ստուգելու համար, բայց կա այլ լուծում:
Այս լուծման էությունը հետևյալն է. գաղտնաբառերը պետք է աղել: Աղը հատուկ պատահական տող է, որը կավելացվի գաղտնաբառին գրանցման ժամանակ, և հեշը արդեն կհաշվարկվի ոչ թե պարզ գաղտնաբառից, այլ աղ+գաղտնաբառ տողից, այսինքն աղացած գաղտնաբառից:
Այսինքն գրանցման ժամանակ դուք կանեք mոտով բան, օրինակ.
<?php
$salt = '1sJg3hfdf'; // աղը - բարդ պատահական տող
$password = md5($salt . $_POST['password']); // վերափոխում ենք գաղտնաբառը աղացած հեշի
?>
Այս դեպքում աղը յուրաքանչյուր օգտատիրոջ համար տարբեր կլինի, այն պետք է պատահականորեն գեներացվի գրանցման պահին:
Ահա պատրաստի ֆունկցիա, որը կանի դա.
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // աղի երկարությունը
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // նիշ ASCII-աղյուսակից
}
return $salt;
}
?>
Օգտագործելով այս ֆունկցիան, մենք կարող ենք վերագրել մեր կոդը ահա այսպես.
<?php
$salt = generateSalt(); // աղը
$password = md5($salt . $_POST['password']); // աղացած գաղտնաբառը
?>
Կրկնեմ ևս մեկ անգամ, որ սրանք գրանցման ժամանակ կատարված փոփոխություններ էին - ՏՏ-ում պահպանում ենք ոչ թե պարզապես գաղտնաբառի հեշը, այլ աղացած գաղտնաբառի հեշը:
Սա դեռ ամենը չէ. օգտատերերի աղյուսակում, բացի
login և password դաշտերից, անհրաժեշտ է
ստեղծել նաև salt դաշտ, որտեղ
մենք կպահենք յուրաքանչյուր օգտատիրոջ աղը:
Իրականացրեք վերը նկարագրված գրանցումը աղացած գաղտնաբառով: