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

[تصویر:  HTCSLP_SOFTAFZAR_NET.png]


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

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

[تصویر:  phpmyadmin_softafzar_net.jpg]

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

[تصویر:  sql_softafzar_net.jpg]



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

برای طراحی فرم دو فایل با نام های register.html و style.css ایجاد کنید:

فایل:register-form.html:

[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>
[/HTML]

فایل: style.css:
[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;
}
}[/CSS]



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

بعد از زدن دکمه register توسط کاربر اطلاعات فرم که شامل نام کاربری، پسورد،تکرار پسورد و ایمیل هست به فایل register.php ارسال میشن .
+ فرم ها در PHP
+Post و Get در PHP
حالا ما باید با استفاده از متغیر POST_$ دریافت کنیم، پسورد کاربر رو بصورت رمز شده در بیاریم و در نهایت کاربر جدید به جدول اضافه کنیم:
فایل: register.php:
کد 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:
کد php:
function createSalt() {
    
$text md5 uniqid rand (), true ) );
    return 
substr $text0);
}

$salt createSalt ();
$password hash 'sha256'$salt $hash ); 

حالا اطلاعات کاربر جدید رو در جدولمون که قبلا ساختی موارد میکنیم:
ادامه کدهای فایل register.php:
کد 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:
<?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 $text0);
}

$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>" );
?>

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

پاسخ
ایجاد موضوع جدید   پاسخ به موضوع  

موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Note آموزش MVC به زبان ساده (تصویری) Daniel 1 802 16-08-2016 ساعت 09:24
آخرین ارسال: aaiz
Note آموزش MVC Daniel 1 679 26-11-2015 ساعت 12:56
آخرین ارسال: bkk
Note کتاب آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 992 16-02-2015 ساعت 10:48
آخرین ارسال: Stack OverFlow
Note آموزش ساخت صفحه بندی در php pHp king 2 1,083 18-05-2014 ساعت 15:34
آخرین ارسال: pHp king
Note آموزش مقدماتی php (کتاب) PHP.sec 0 359 16-03-2014 ساعت 21:25
آخرین ارسال: PHP.sec
Note آموزش PHP از مقدماتی تا پیشرفته Stack OverFlow 0 364 28-02-2014 ساعت 16:23
آخرین ارسال: Stack OverFlow
Note آموزش Regex IranPhp 1 394 09-02-2014 ساعت 18:29
آخرین ارسال: PHP.sec
Note آموزش گذاشتن کپچا(Captcha) در سایت SOFTAFZAR 1 1,272 06-02-2014 ساعت 22:46
آخرین ارسال: Wp script
Note آموزش ساخت نسخه موبایل برای سایت SOFTAFZAR 0 438 27-01-2014 ساعت 15:24
آخرین ارسال: SOFTAFZAR
Note آموزش Laravel (قسمت سوم) Daniel 0 764 24-01-2014 ساعت 17:39
آخرین ارسال: Daniel

کاربرانِ درحال بازدید از این موضوع:   1 مهمان