-
با تشکر از مثال.
اونها (shaX) هم خوب هسنتد ولی md5 عام تره.
شما 100% بدون که هیچ کس نمی تونه از کد md5 یه مقدار واقعی عبارت برگرده (البته میان مقدار md5 عبارت ها رو همراه با عبارت می ذارن توی 1 دیتابیس که بعداً بشه اونوری اش کرد. اما این کار، چندین سال طول می کشه.)
برای امنیت بیشتر، می تونید چند بار md5 بگیرید
[PHP]$adminPassword = md5(md5(md5(md5(md5("f62a7c27cb31760a295e7f254f3e8 0d2")))));[/PHP]
-
در كل يعني اگه پسورد ها با الگوريتم md5 كدگذاري بشوند هيچ راه بازگشتي وجود نداره مگر اين كه كلمه عبور را داشته باشي . عمل بازگرداندن كلمه عبور حتي براي مدير سايت كه به كل داده ها و ديتابيس دسترسي داره هم غيرممكن هست؟!
و
چطور مي شه از sha512 در php استفاده كرد؟
-
بله. کاملاً
اون sha1 هم مثلاً در mySQL میشه انجام داد
[PHP]mysql_query("SELECT * From testUser WHERE password = sha1($pass)");[/PHP]
-
نمي خواين بحث رو ادامه بدين؟! كسي نيست!
-
من منتظر دوستان دیگر هستم
-
راستشو اگه بخواين نمي خوام پست الكي بدم ولي بدون پست هم تاپيك از صفحه اول خارج مي شه. من خودم منتظر ادامه بحث هستم. <dog></dog> جان خوب شروع كرده بودي ادامه بدي ممنون مي شم.
-
بزارید اول ببینیم کجا هستیم و کجا باید بریم. من یه چیزایی نوشتم چک کنید اگر شرایط دیگه ای هم هست بگید تا من تو همین پست وارد کنم تا طبق اون پیش بریم وگرنه که من قسمت ثبت نام رو نوشتم بزارم توی تاپیک:
- توی سایتمون میخوایم صفحاتی داشته باشیم که فقط برای اعضای سایت قابل دسترسی باشن.
- برای اینکه اعضای سایت رو بشناسیم اعضا باید ثبت نام کنند.
- اطلاعات مربوط به اعضا که در یک جدول mysql نگهداری خواهند شد:
1. id که به صورت خودکار توسط mysql وارد جدول میشه.
2. نام کاربری که توسط کاربر در فرم ثبت نام وارد میشه.
3. کلمه عبور که توسط کاربر انتخاب شده و با متد md5 هش میشه تا قابل بازیابی نباشه.
- یک صفحه ثبت نام لازم داریم که افراد از طریق اون عضو سایت بشن.
- اسکرپت ثبت نام که بتونه در صورتی که اطلاعات کاربر قابل قبول بود اونا رو در جدول ثبت کنه.
شرایط ثبت نام رو به این صورت در نظر میگیریم:
1. نام کاربری نباید قبلاً ثبت شده باشه.
2. حداقل تعداد حروف نام کاربری و کلمه عبور باید 4 حرف باشه.
3. حداکثر طول نام کاربری و کلمه عبور باید 20 حرف باشه.
- یک فرم لوگین میخوایم تا اعضا از طریق اون وارد سایت بشن.
- اسکرپت لوگین که نام کاربری رو از صفحه ثبت نام بگیره و با جدول چک کنه و اگر مطابقت داشت اجازه دسترسی به صفحات حفاظت شده رو از طریق ست کردن یک سری session به کاربر بده و کاربر رو به صفحه ای که از اون لوگین کرده ریدایرکت کنه
- صفحات اصلی سایت با استفاده از session اعضای سایت رو تشخیص میدن.
- اسکرپت Logout برای خارج شدن اعضا از سایت.
-
ممنون neopersia جان.
ما مي خوايم كاربر از هر صفحه اي كه وارد صفحه لوگين يا ثبت نام مي شه بعد از اتمام مراحل دوباره به صفحه اي كه بوده بصورت لاگين شده ريدايركت بشه.
و يك سوال: اگه بخوايم از https براي صفحه ثبت نام و لوگين استفاده كنيم شريط فرق مي كنه؟!
-
من جدول اعضا رو با این ساختار ایجاد کردم:
[php]
CREATE TABLE IF NOT EXISTS `testtable` (
`id` int(11) unsigned NOT NULL auto_increment,
`username` varchar(255) collate utf8_unicode_ci NOT NULL,
`password` varchar(255) collate utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
[/php]
-
این اسکرپت ثبت نام و فرم مربوط به اون هست که توی یک فایل با نام register.php ذخیره میشه:
[php]
<?php
session_start();
// حذف بک اسلشهایی که به صورت خودکار توسط Magic Quotes به اطلاعات ارسال شده افزوده شده اند
function UnEscape($string) {
if (get_magic_quotes_gpc()) {
return stripslashes($string);
} else {
return $string;
}
}
$errors = array();
$min_length = 4;
$max_length = 20;
// اجرای اسکرپت ثبت نام در صورتی که اطلاعات با متد پست به صفحه ارسال شده باشند
if($_SERVER['REQUEST_METHOD'] == "POST") {
$username = UnEscape($_POST['user']);
$password = UnEscape($_POST['pass']);
// چک کردن اطلاعات وارد شده توسط کاربر
if(strlen($username) < $min_length) {
$errors[] = "حداقل طول نام کاربری $min_length حرف است!";
}
if(strlen($username) > $max_length) {
$errors[] = "حداکثر طول نام کاربری $max_length حرف است!";
}
if(strlen($password) < $min_length) {
$errors[] = "حداقل طول کلمه عبور $min_length حرف است!";
}
if(strlen($password) > $max_length) {
$errors[] = "حداکثر طول کلمه عبور $max_length حرف است!";
}
if($_POST['pass'] !== $_POST['retype_pass']) {
$errors[] = "کلمه عبور با تکرار کلمه عبور مطابقت ندارد!";
}
// وارد کردن اطلاعات کاربر در صورتی که اطلاعات معتبر باشند
if(empty($errors)) {
// اتصال به سرور
mysql_connect('localhost', 'root', '') or die(mysql_error());
// اتصال به دیتابیس
mysql_select_db('testDB') or die(mysql_error());
// اسکیپ کردن داده های وارد شده توسط کاربر
$username = mysql_real_escape_string(htmlentities($username, ENT_QUOTES, 'UTF-8'));
$password = mysql_real_escape_string($password);
// به دست آوردن تعداد سطرهایی که نام کاربری مشابه نام کاربری انتخاب شده کاربر دارند
list($count) = mysql_fetch_row(mysql_query("SELECT COUNT(*) FROM testTable WHERE username = '$username';"));
if($count) {
// قطع عملیات در صورتی که نام کاربری وارد شده قبلاً ثبت شده باشد
mysql_close();
$errors[] = "نام کاربری مورد نظر قبلاً ثبت شده است!";
} else {
// ثبت اطلاعات و ریدایرکت کردن کاربر برای جلوگیری از ارسال مجدد اطلاعات در صورت رفرش شدن صفحه
mysql_query("INSERT INTO testTable SET username = '$username', password = MD5('$password');") or die(mysql_error());
mysql_close();
$_SESSION['registeration_completed'] = true;
header("Location: $_SERVER[PHP_SELF]");
exit();
}
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>صفحه ثبت نام از کاربران جدید</title>
<style type="text/css">
body { direction:rtl; }
form, table { width: 300px; margin:0px auto;}
td { text-align:center; }
th { text-align:right; }
</style>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<?php
if(!empty($errors)) {
echo "<ul>";
foreach($errors as $error) {
echo "<li>$error</li> \n";
}
echo "</ul>";
} elseif ($_SESSION['registeration_completed']) {
echo "<h3>ثبت نام شما با موفقیت انجام شد.</h3>";
unset($_SESSION['registeration_completed']);
}
?>
<table border="0">
<tr>
<th>نام کاربری :</th>
<td><input type="text" name="user" value="<?php echo UnEscape($_POST['user']); ?>" /></td>
</tr>
<tr>
<th>کلمه عبور :</th>
<td><input type="password" name="pass" /></td>
</tr>
<tr>
<th>تکرار کلمه عبور :</th>
<td><input type="password" name="retype_pass" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="submit" value="ثبت نام" /></td>
</tr>
</table>
</form>
</body>
</html>
[/php]