با سلام
امروز قصد دارم آموزش ساخت یه صفحه ثبت امن با PHP و توابع MySQLi رو براتون بذارم. MySQL دیگه خیلی قدیمی شده و الان دیگه باید از توابع MySQLi استفاده کنیم.
برای اینکه بتونیم صفحه ثبت نام رو امن کنیم باید داده هایی که کاربر روارد میکنه روبا توابع خاصی چک کنیم ، این کاریه که همیشه باید برای امن نگه داشتن انجام بدیم.
[align=center]
[/align]
[color=#006400]مرحله اول[/color] - ساخت دیتابیس ،جدول و اطلاعات مربوطه
نام دیتابیس: satestdb
نام جدول : users
اولین کار اینه که دیتابیسمون رو بسازیم، برای اینکار از نرم افزار phpMyadmin استفاده کنید.
[align=center]
[/align]
حالا به تب SQL رفته و این کد ها رو اجرا کنید:
[SQL]
CREATE TABLE satestdb
.users
(id
INT NOT NULL AUTO_INCREMENT PRIMARY KEY,username
VARCHAR(30) NOT NULL,password
CHAR(128) NOT NULL,email
VARCHAR(50) NOT NULL,salt
CHAR(128) NOT NULL
) ENGINE = InnoDB;
[/SQL]
[align=center]
[/align]
[color=#006400]مرحله دوم[/color] - طراحی فرم ثبت نام
برای طراحی فرم دو فایل با نام های register.html و style.css ایجاد کنید:
فایل:register-form.html:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Register</title>
<link rel="StyleSheet" href="style.css" />
</head>
<body>
<form name="register" action="register.php" method="post">
<table width="410" border="0">
<tr>
<td colspan="2"><p>
<strong>Registration Form</strong>
</p></td>
</tr>
<tr>
<td>Username:</td>
<td><input type="text" name="username" maxlength="20" /></td>
</tr>
<tr>
<td>Password:</td>
<td><input type="password" name="password1" /></td>
</tr>
<tr>
<td>Confirm Password:</td>
<td><input type="password" name="password2" /></td>
</tr>
<tr>
<td>Email:</td>
<td><input type="text" name="email" id="email" /></td>
</tr>
<tr>
<td> </td>
<td><input type="submit" value="Register" /></td>
</tr>
</table>
</form>
</body>
</html>
فایل: style.css:
@CHARSET "ISO-8859-1";
body {
background: #44829B;
}
form {
position: relative;
background: rgba(250, 250, 250, 0.9);
box-shadow: 0 0 13px #9C9C9C,0 0 15px #F3F3F3 inset;
margin: 0 auto;
width: 400px;
padding: 20px 70px;
top: 50px;
border-radius: 4px;
}
input[type="text"],
input[type="password"] {
background: #FAFAFA;
padding: 5px;
outline: none;
border: 1px solid #D3D3D3;
border-radius: 2px;
}
input[type="submit"] {
background: #FDFDFD;
padding: 5px 25px;
border: 1px solid #DDD;
box-shadow: 0 0 3px #E2E2E2;
border-radius: 3px;
cursor: pointer;
}
}
[color=#006400]مرحله سوم[/color] - ساخت فایل php
بعد از زدن دکمه register توسط کاربر اطلاعات فرم که شامل نام کاربری، پسورد،تکرار پسورد و ایمیل هست به فایل register.php ارسال میشن .
[color=#800080]+ فرم ها در PHP[/color]
[color=#800080]+Post و Get در PHP[/color]
حالا ما باید با استفاده از متغیر POST_$ دریافت کنیم، پسورد کاربر رو بصورت رمز شده در بیاریم و در نهایت کاربر جدید به جدول اضافه کنیم:
فایل: register.php:
<?php
// Secure Registration by softafzar.net
// retrieve our data from POST
$username = $_POST ['username'];
$password1 = $_POST ['password1'];
$password2 = $_POST ['password2'];
$email = $_POST ['email'];
if (empty ( $password1 ) || empty ( $username ) || empty ( $email ))
header ( 'Location: register-form.html' );
if ($password1 != $password2)
header ( 'Location: register-form.html' );
if (strlen ( $username ) > 30)
header ( 'Location: register-form.html' );
تا اینجا ما داده ها رو دریافت کردیم، در لاین های 9 و 10 تعیین کردیم اگر کاربر هر کدوم از اطلاعات رو وارد نکرد دوباره به صفحه ثبت نام انتقال پیدا کنه. در لاین های 12 و 13 یکسان بودن پسورد و تکرار اون رو چک کردیمو در لاین های 15 و 16 طول نام کاربری و برری کردیم که اگر بیشتر از 32 کاراکتر بود دوباره به صفحه ثبت نام برگرده.
حالا به مهمترین بخش آموزش یعنی امن کردن پسورد کاربر هست . برای اینکار از کدهای زیر استفاده میکنیم:
ادامه کدهای فایل register.php:
function createSalt() {
$text = md5 ( uniqid ( rand (), true ) );
return substr ( $text, 0, 3 );
}
$salt = createSalt ();
$password = hash ( 'sha256', $salt . $hash );
حالا اطلاعات کاربر جدید رو در جدولمون که قبلا ساختی موارد میکنیم:
ادامه کدهای فایل register.php:
$conn = mysqli_connect ( 'localhost', 'root', '', 'satestdb' );
// sanitize username
$username = mysqli_real_escape_string ( $conn, $username );
$query = "INSERT INTO users ( username, password, email, salt )
VALUES ( '$username', '$password', '$email', '$salt' );";
mysqli_query ( $conn, $query );
mysqli_close ( $conn );
die ( "<h1>Registration successful.</h1>" );
?>
در نهایت فایل register.php به این شکل میشه:
<?php
// Secure Registration by softafzar.net
// retrieve our data from POST
$username = $_POST ['username'];
$password1 = $_POST ['password1'];
$password2 = $_POST ['password2'];
$email = $_POST ['email'];
if (empty ( $password1 ) || empty ( $username ) || empty ( $email ))
header ( 'Location: register-form.html' );
if ($password1 != $password2)
header ( 'Location: register-form.html' );
if (strlen ( $username ) > 30)
header ( 'Location: register-form.html' );
$hash = hash ( 'sha256', $password1 );
function createSalt() {
$text = md5 ( uniqid ( rand (), true ) );
return substr ( $text, 0, 3 );
}
$salt = createSalt ();
$password = hash ( 'sha256', $salt . $hash );
$conn = mysqli_connect ( 'localhost', 'root', '', 'satestdb' );
// sanitize username
$username = mysqli_real_escape_string ( $conn, $username );
$query = "INSERT INTO users ( username, password, email, salt )
VALUES ( '$username', '$password', '$email', '$salt' );";
mysqli_query ( $conn, $query );
mysqli_close ( $conn );
die ( "<h1>Registration successful.</h1>" );
?>
اگر خدا بخواد در آموزش بعدی، آموزش ساخت یه صفحه لاگین امن رو میذارم.
موفق باشید.