PDA

View Full Version : سوال: ساخت صفحه لاگین



decoder2012
یک شنبه 15 اسفند 1389, 16:00 عصر
سلام من کد زیر رو در خصوص ساخت صفحه ی لاگین ایجاد کردم دوستان لطف کنن از اونجایی که من تازه کارم ، اشکالاتش و نواقص شو بفرمایند .
در ضمن اگه باید از کوکی یا سیشن استفاده کنم . یه آموزش هم در این خصوص لینک بدن .
واقعاً ممنون


<?php
include ("config.php");


$username = $_POST["tfuser"];
$userpass = $_POST["tfpass"];

if ($username == '') {
echo " Enter User name ";
}
if ($userpass == ''){
echo "<br> Enter PASSWORD ";
}



$res = mysql_query (" SELECT * FROM user where id='$username' ");

while ($record = mysql_fetch_assoc ($res))
{
$user = $record["id"];
$pass = $record["pass"];
$name = $record["name"];
}

if ($user != $username){
echo "<br> Enter Corect username" ;

}
if ($pass != $userpass){
echo "<br> Enter Corect Password";
}


?>

binyaft
یک شنبه 15 اسفند 1389, 16:45 عصر
1 : مقادیر ارسالی توسط کاربر رو خام وارد دیتابیس نکن ، اول باید فیلترشون کنی ، mysql_escape_string , و باید یه دستور هم بزاری که مثلا اگر نام کاربر از 30 کاراکتر بیشتر شد جواب نده

2 : با ی دونه کوئری مقادیر رو چک کن راحت تر و بهتره! ، برای کد بالا نام کاربری و رمز عبور رو با هم وارد دیتابیس کن ;)

3 : بهتره که نمایش ندی چی درسته چی غلط! ، اگه داده ها اشتباه بود بنویس " نام کاربری یا رمز عبور اشتباه است "

sargardoon
یک شنبه 15 اسفند 1389, 16:53 عصر
دوست عزیز باید اول اینکه زمانی این کدهای اجرا بشه که دکمه ای کلیک میشه این کدهای رو میتونید به روش زیر بنویسید.


<?php
include ("config.php");
if ($_POST['submit']){
$username = $_POST["tfuser"];
$userpass = $_POST["tfpass"];

if (!empty ($username) && !empty ($userpass) ){
$res = mysql_query (" SELECT * FROM user where id='$username' ");
while ($record = mysql_fetch_assoc ($res))
{
$user = $record["id"];
$pass = $record["pass"];
$name = $record["name"];
}
if ($user != $username){
echo " Enter Corect username" ;

}

if ($pass != $userpass){
echo " Enter Corect Password";
}
} else {
echo "please enter username and password";
}
}
?>



موفق باشید

decoder2012
یک شنبه 15 اسفند 1389, 17:24 عصر
1 : مقادیر ارسالی توسط کاربر رو خام وارد دیتابیس نکن ، اول باید فیلترشون کنی ، mysql_escape_string , و باید یه دستور هم بزاری که مثلا اگر نام کاربر از 30 کاراکتر بیشتر شد جواب نده



یه مثال ازش میارین . کاربردش چیه ؟

amir001
یک شنبه 15 اسفند 1389, 17:40 عصر
در مورد بحث امنیت هست.
اگر داده ها را به صورت خام و همونطور که از کاربر گرفتید بذارید توی کوئری هاتون ، مشکل امنیتی براتون پیدا میشه.
به این نوع مشکل SQL Injection یا تزریق sql میگن.

اگر کاربر ورودی نا معتبری بده میتونه کوئری شما را تغییر بده و سوء استفاده کنه.

نمونه :
الان کوئری شما این هست:
" SELECT * FROM user where id='$username' "

اگر کاربر نام کاربری را مثلا amir وارد کنه کوئری شما به شکل زیر میشه:

" SELECT * FROM user where id='amir' "

حالا اگر نام کاربری را به شکل زیر وارد کنه ببینید کوئری شما چه شکلی میشه:

نام کاربری :
amir' or 1=1 --

کوئری:
" SELECT * FROM user where id='amir' or 1=1 --' "

با این کار تمامی رکوردها انتخاب میشن و دیگه کاری به نام کاربری نداره.
حالا کافیه یوزر را به شکل بالا وارد کنه و پسوورد را مثلا 123456 ، اگر یک کاربری بود که پسووردش را ساده گذاشته بود به راحتی انتخاب میشه و طرف با نام کاربری اون وارد سایت شما میشه.

این یک نمونه ساده بود. میشه دستورات بیشتری هم به کوئری شما تزریق کرد.

حالا اون تابعی که دوستمون معرفی کردند میاد و کاراکتر هایی مثل ' یا " را از متغیر یوزر نیم تغییر میده تا اگر کاربری رشته مشکل داری برای تزریق به دیتا بیس شما وارد کرد نادیده گرفته بشه و مشکلی برای کوئری شما پیش نیاد.

امیدوارم تونسته باشم به خوبی مفهومش را بیان کنم.

binyaft
یک شنبه 15 اسفند 1389, 17:46 عصر
$username=mysql_escape_string($username);

و


if(strlen($_POST['user'])>30) echo 'bishtar az 30 ta';