درود بر کاربران عزیز وب (گفتن سلام عربیه بجاش بگیم درود D:)
اول اینکه من سر جریاناتی که بعضیا در جریانن نبودم و اینکه درگیر کار و بارم زیاد سر نمیزنم...
این پستو بخاطر یکی از دوستان نوشتم که تو سالت کردن مشکل داشت.
سالت (salt) روشیه که باهاش جلوی حملات بروت فورس رو روی پسورد های کرک شده میگیرن.
md5 به اندازه کافی برای محافظت از دیتابیس ها جوابگو نیستن و جلوی کرک(بروت فورس) آسیب پذیرن...
ما میتونیم با سالت کردن پسورد جلوی این روش رو بگیریم.
سالت کردن توی برنامه نویسی یعنی یه سری کاراکتر بی معنی رو که از قبل مشخص شدن و متغیر نیستن به اول و آخر پسورد اضافه کنیم و بعد هش کنیم.
به مثال زیر توجه کنین:
$salt1 = "420WeeD420";
$salt2 = "S@lt4208569";
$password = 'mysecret';
$md5passwrd = md5("$salt1$password$salt2");
حالا به کد دقت کنید. اول دوتا سالت رو مشخص کردیم و پسورد هم مشخص کردیم. بعد اون هارو کنار هم گذاشتیم و هش کردیم.
اگه هش نکنیم و خروجی رو بگیریم یه همچنین چیزی میشه:
qm&h*mysecretpg!@
حالا احتمال کرک کردن این پسورد تقریبا به صفر میرسه...

حالا واسه نوشتن کن های نهایی، یه مثال واسه سالت کردن مینویسیم.
کد های زیر، واسه سالت کردن پسورد و ذخیره کردنش توی دیتابیسه.
کد های زیرو توی فایل register.php بذارید:
<?php //register.php
$db_server = mysql_connect("localhost", "root", "");
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database)
or die("Unable to select database: " . mysql_error());
$query = "CREATE TABLE users (
username VARCHAR(32) NOT NULL UNIQUE,
password VARCHAR(32) NOT NULL
)";
$result = mysql_query($query);
if (!$result) die ("Database access failed: " . mysql_error());
$salt1 = "420WeeD420";
$salt2 = "S@lt4208569";
$username = 'drcyber32';
$password = 'mysecret';
$token    = md5("$salt1$password$salt2");
add_user($username, $token);
$username = 'john.doe';
$password = 'jdoe123';
$token    = md5("$salt1$password$salt2");
add_user($username, $token);
function add_user($un, $pw)
{
$query = "INSERT INTO users VALUES('$un', '$pw')";
$result = mysql_query($query);
if (!$result) die ("Database access failed: " . mysql_error());
}
?>

حالا توی فایل زیر که واسه لوگین کردن و خوندن اطلاعاته کد های زیر رو بنویسید و با اسم auth.php ذخیره کنید.

<?php // auth.php
$db_server = mysql_connect("localhost", "root", "");
if (!$db_server) die("Unable to connect to MySQL: " . mysql_error());
mysql_select_db($db_database)
or die("Unable to select database: " . mysql_error());
if (isset($_SERVER['PHP_AUTH_USER']) &&
isset($_SERVER['PHP_AUTH_PW']))
{
$un_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_USER']);
$pw_temp = mysql_entities_fix_string($_SERVER['PHP_AUTH_PW']);
$query = "SELECT * FROM users WHERE username='$un_temp'";
$result = mysql_query($query);
if (!$result) die("Database access failed: " . mysql_error());
elseif (mysql_num_rows($result))
{
$row = mysql_fetch_row($result);
$salt1 = "420WeeD420";
$salt2 = "S@lt4208569";
$token = md5("$salt1$pw_temp$salt2");

if ($token == $row[3]) echo "you are now logged in as '$row[2]'";
else die("Invalid username/password combination");
}
else die("Invalid username/password combination");
}
else
{
header('WWW-Authenticate: Basic realm="Restricted Section"');
header('HTTP/1.0 401 Unauthorized');
die ("Please enter your username and password");
}
function mysql_entities_fix_string($string)
{
return htmlentities(mysql_fix_string($string));
}
function mysql_fix_string($string)
{
if (get_magic_quotes_gpc()) $string = stripslashes($string);
return mysql_real_escape_string($string);
}
?>

اینم از این D:
حالا کد هارو توی هاست اجرا کنید (اگه ندارید از نرم افزار xampp استفاده کنید)
با این روش از پسورداتون محافظت کنید ;)


We work in dark to serve light
we are DarkArmyTeam