سوال در مورد چند تابع

DaDaDooDoo

کاربر VIP
سلام ، آیا این سیستم لاگین اصولی و امن هست از نظر شما ؟

PHP:
if (!isset($_SESSION)) {
  session_start();
}


$logact = $_SERVER['PHP_SELF'];

if (isset($_POST['usr_usr'])) {
  $loginUsername=$_POST['usr_usr'];
  $password=md5($_POST['usr_pws']);
  $ICX_UserA = "usr_access_level";
  $ICX_RedirectLS = "phpackmgr/index.php";
  $ICX_RedirectOF = "index.php?error=failed";
  mysql_select_db($database_PHPackConn, $PHPackConn);
  	
  $LoginRS__query=sprintf("SELECT usr_username, usr_password, usr_alias, usr_access_level FROM tbladmin WHERE usr_username='%s' AND usr_password='%s'",
  get_magic_quotes_gpc() ? $loginUsername : addslashes($loginUsername), get_magic_quotes_gpc() ? $password : addslashes($password)); 
   
  $LoginRS = mysql_query($LoginRS__query, $PHPackConn) or die(mysql_error());
  $loginFoundUser = mysql_num_rows($LoginRS);
  if ($loginFoundUser) {
    
    $loginStrGroup  = mysql_result($LoginRS,0,'usr_access_level');
	$loginStrAlias  = mysql_result($LoginRS,0,'usr_alias');
    
    $_SESSION['MM_Username'] = $loginUsername;
    $_SESSION['MM_UserGroup'] = $loginStrGroup;
	$_SESSION['MM_UserAlias'] = $loginStrAlias;

    header("Location: " . $ICX_RedirectLS );
  }
  else {
    header("Location: ". $ICX_RedirectOF );
  }
}

درمورد توابع زیر هم اگر می شه یه توضیح ساده بدبد ، ممنون میشم .
sprintf
mysql_real_escape_string
get_magic_quotes_gpc
stripslashes
 

DaDaDooDoo

کاربر VIP
نمیدونم ، این سورس یک سایت خبری هست که اتفاقی به دست من رسیده
 

Cyletech

Member
اگر خیلی ریز بشیم ، ممکنه توابعی چون addslashes روی سرور فعال نباشن. برای همین باید اول دید این تابع وجود دارد یا نه (function_exists()).
دوم ، من ترجیح میدم بجای md5 که فقط 32 کاراکتر میده ، اول md5 کنم بعدش از sha ها مثل sha256 استفاده کنید که 64 کاراکتر بده.

stripslashes تمام اسلش های موجود تو رشته رو حذف می کنه و از کاربرد هاش اینه که رو سرور شما magic_quotes_gpc روشنه بصورت پیش فرض و اطلاعات رو جایی خارج دیتابیس می خواید قرار بدید که نیاز داره اسلش ها حذف بشه مثلاً در داخل یک فرم اچ تی ام ال

get_magic_quotes_gpc این تابع اگر در یک شرط مثل if قرار بگیره چک می کنه که آیا مجیک گوتس روشنه یا نه. اگر روشن بود ، پس بصورت پیش فرض کوتیشن هارو اسکیپ می کنه یعنی بهشون یک بک اسلش اضافه میکنه (نه داخل خود رشته بلکه برای اون عمل فقط ظاهری عمل می کنه یعنی ظاهراً یک اسلش داره ولی وقتی در دیتابیس ذخیره میشه دیگه یک اسلش ندارن)

mysql_real_escape_string این تابع و تابع قبلی و addslashes در اسکیپ کردن کوتیشن ها خیلی مناسب هستند. این تابع هم رشته ای که بهش میدی رو با قرار دادن یک بک اسلش پشت کوتیشن هاش اسکیپش می کنه. البته نه فقط کوتیشنی که میبینیم. کاراکتر های خاصی در منبعش گفته شده.

sprintf یک تابع مثل print هست یعنی کار چاپ رو می کنه با این تفاوت که برای رشته هایی که یک فرمت خاص دارن. یعنی یه جورین با باقیه رشته ها برای چاپ متفاوتن. از مثال های خود منبع:
PHP:
<?php
$num = 5;
$location = 'tree';

$format = 'There are %d monkeys in the %s';
printf($format, $num, $location);
?>
در اینجا %d به معنی عدد دسیمال هست. یعنی فقط باید از همین نوع باشه. و بعد %s به معنی رشته یا string هست که باز فقط باید از همین نوع باشه. انواع فرمت هارو در خود منبع مطالعه کن.
 

Domanjiri

Well-Known Member
سلام

این مواردی که میگم الزامی نیست ولی به نظر من بهتره که رعایت بشه

توی پرسش ($LoginRS__query ):
PHP:
SELECT usr_username, usr_password, usr_alias, usr_access_level FROM tbladmin WHERE usr_username='%s' AND usr_password='%s'"
خوندن usr_password دلیل خاصی نداره و بهتره که نباشه ( البته اگه از هاست های اشتراکی قراره که استفاده بشه، بهتره که این باشه و در انتهای کوئری usr_password جزو شرط ها نباشه و مچ بودن پسورد توی همین فایل PHP بررسی بشه)

در اینجا :
PHP:
if ($loginFoundUser)
حداقل یه 1== قرا بدین، یا اینکه یه LIMIT1 به انتهای کوئری اضافه کنید و داخل ایف $LoginRS رو قرار بدین ( می تونید به جای قرار دادن limit 1 فیلد مر بوط به یوزر نیم رو یکتا تعریف کنین UNIQUE )

بهتره که به جای addslashes از mysql_real_escape_string استفاده کنید.

نکته: بسته (از بستگی میاد!) به میزان امنیتی که مورد نیاز هست، ممکنه یه متخصص امنیت کل کدتون رو رد کنه!! اما به نظر می رسه این دستورات قابل قبول هست و مشکلی براتون پیش نخواهد اومد. البته فقط درصدی از امنیت لاگین مربوط به این پروسه ای میشه که کدش رو قرار دادین.

موفق و پیروز باشین
 

جدیدترین ارسال ها

بالا