با سلام
امروز قصد دارم آموزش ساخت یه صفحه ثبت امن با 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>&nbsp;</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>" );
?>

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