Salam dostlar. Bu gün sizlə öz yazdığım maraqlı bir şeyi paylaşacam.
Düzdü xırda olsa da sizə çox kömək edəcək.
Deyəkki saytınız var. Attacker serverdən database ə çatıb və bütün user pass ları görür o zaman siz böyük risk altında qalırsız , çünki təkcə md5 ilə şifrələnən pass ların qırılma ehtimalı daha çoxdu.+ 2 eyni userin əgər passı eynidirsə o zaman
md5 hashları da eyni olacaq və əgər attacker bunların birini qırsa o biri userin passını da qırmış olacaq.
O zaman sizin köməyinizə salt metodu gəlir.Bu zaman 2 eyni passın hash ı fərqli olacaq ki bu da bir şifrə qırılsa da o biri təhlükəsiz halda db də qalacaq. Sadəcə $salt ı minimum 127 uzunluqda olmaq şərtlilə editləyin və işlədin.
Aşağıda verdiyim skript və test case ləri incələyib öz saytınıza uyğun editləyin.(P.S bunun üçün PHPnin mcrypt funksiyasını da işlədə bilərsiz)
Burda hər ikisinin passı 123456 di
salt_protect.php
Kod:
<?php
$salt ="A012a34bB5cd6CeD78E9fFghijGkHIJKLMlNmOnPQRSTopUqVWrstXYuZvwxyz|aAB0CDE12FGHbIc3deJK456fghLMNOPijQkRSl7m8T9UnVWoXYZpqrstuvwxyz|a&";
if(strlen($salt)<=127){die("Salt uzunlugu en azi 127 olmalidir.");}
function create($input){
global $salt;
$for_salt = array();
$len = strlen($input)/2;
settype($len,"integer");
$str = substr($input,0,$len);
$k=1;
for($i=0;$i<$len;$i++){
if(!isset($str{$k})){break;}
$add = (ord($str{$i})+ord($str{$k}))/2;
settype($add,"integer");
$for_salt[] = $add;
$k++;
}
$free = "";
foreach($for_salt as $salted){
$free .= md5($salt{$salted}.$input);
}
return md5($free.$salt);
}
?>
login.php
Kod:
<?php
include "salt_protect.php";
mysql_connect("localhost","root","") or die("fuck");
mysql_select_db("testing") or die("fuck");
if($_POST){
$u = mysql_real_escape_string($_POST['u']);
$p = mysql_real_escape_string($_POST['p']);
$p = md5(create($u).create($p));
$query = "SELECT * from users where username='$u' and password='$p' ";
if($query_run=mysql_query($query)){if(mysql_num_rows($query_run) ==1){echo "Xos geldin ciger";}else{echo "Osdur";}}}
?>
Login form:
<form action="" method="POST" >
Username: <input type="text" name="u" /><br>
Password: <input type="text" name="p" /><br>
<input type="submit" value="Gonder" /><br>
</form>
register.php
Kod:
<?php
include "salt_protect.php";
mysql_connect("localhost","root","") or die("fuck");
mysql_select_db("testing") or die("fuck");
if($_POST){
if($_POST['p']==$_POST['p_2']){
$u = mysql_real_escape_string($_POST['u']);
$p = mysql_real_escape_string($_POST['p']);
$p = md5(create($u).create($p));
$query = "INSERT INTO users VALUES('','$u','$p')";
if($query_run=mysql_query($query)){echo "ok";}}else{echo "Eyni parol yaz";}}
?>
Register form:
<form action="" method="POST" >
Username: <input type="text" name="u" /><br>
Password: <input type="text" name="p" /><br>
Re-Type Password: <input type="text" name="p_2" /><br>
<input type="submit" value="Gonder" /><br>
</form>
+1 əskik etməyin