آموزش ساخت صفحه عضویت امن با PHP

با سلام
امروز قصد دارم آموزش ساخت یه صفحه ثبت امن با PHP و توابع MySQLi رو براتون بذارم. MySQL دیگه خیلی قدیمی شده و الان دیگه باید از توابع MySQLi استفاده کنیم.
برای اینکه بتونیم صفحه ثبت نام رو امن کنیم باید داده هایی که کاربر روارد میکنه روبا توابع خاصی چک کنیم ، این کاریه که همیشه باید برای امن نگه داشتن انجام بدیم.

 

صفحه عضویت

مرحله اول – ساخت دیتابیس ،جدول و اطلاعات مربوطه

نام دیتابیس: satestdb
نام جدول : users
اولین کار اینه که دیتابیسمون رو بسازیم، برای اینکار از نرم افزار phpMyadmin استفاده کنید.

phpmyadmin

حالا به تب 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;

phpmyadmin

 

مرحله دوم – طراحی فرم ثبت نام

برای طراحی فرم دو فایل با نام های 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><b><i>&nbsp;</i></b></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;
}
}

 

 مرحله سوم – ساخت فایل php

بعد از زدن دکمه register توسط کاربر اطلاعات فرم که شامل نام کاربری، پسورد،تکرار پسورد و ایمیل هست به فایل register.php ارسال میشن .
+ فرم ها در PHP
+Post و Get در PHP

حالا ما باید با استفاده از متغیر 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' );

تا اینجا ما داده ها رو دریافت کردیم، در لاین های ۹ و ۱۰ تعیین کردیم اگر کاربر هر کدوم از اطلاعات رو وارد نکرد دوباره به صفحه ثبت نام انتقال پیدا کنه. در لاین های ۱۲ و ۱۳ یکسان بودن پسورد و تکرار اون رو چک کردیمو در لاین های ۱۵ و ۱۶ طول نام کاربری و برری کردیم که اگر بیشتر از ۳۲ کاراکتر بود دوباره به صفحه ثبت نام برگرده.
حالا به مهمترین بخش آموزش یعنی امن کردن پسورد کاربر هست .  برای اینکار از کدهای زیر استفاده میکنیم.
ادامه کدهای فایل 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>" );
?>

 

اگر خدا بخواد در آموزش بعدی، آموزش ساخت یه صفحه لاگین امن رو میذارم.
موفق باشید.

10 دیدگاه برای «آموزش ساخت صفحه عضویت امن با PHP»

  1. با سلام.ممنون.عالی بود.من ی مشکلی دارم.میخام روی سرور اصلی بذارم میخاستم بدونم ب جای این ۳ مقدار localhost’, ‘root’, ”, ‘satestdb به ترتیب چی بذارم؟ در واقع مشکلم با root !!!!!!!!!!!!!!!!!!!!!!!!!
    جاش چی بذارم؟

    1. سلام
      همون موقع که دیتابیستون رو ساختید همه این اطلاعات رو خودتون وارد کردید. فقط میمونه localhost که معمولا نیازی نیست تغیری بدید.

    1. سلام. لطفا بیشتر توضیح بدید. من باگی پیدا نکردم!. موقع ذخیره کردن در دیتابیس، داده اصلی رو بدون تغییر ذخبره میکنم. بعد هنگام echo کردن از htmlspecialchars استفاده میکنم.

  2. با درود بی پایان
    “اگر خدا بخواد در آموزش بعدی، آموزش ساخت یه صفحه لاگین امن رو میذارم.
    موفق باشید.”
    خدا که میخواهد، شما کی قصد دارید این آموزش را بگذارید، چند روز آینده منتظر باشیم یا نه؟

  3. درود اهورا مزدا به شما خیلی این سایت اون سایت کردم هیچکدوم مثل شما خوب و مفید توضیح نداده بود بخصوص اون بخش اولش رو که هیچکدوم از سایتا توضیحی درموردش نداده بودند البته من بلد بودما ولی کلی گفتم 😀

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

به سوال زیر پاسخ بدهید *