PDA

View Full Version : راهنمایی در مورد فایل login



zahra-j
پنج شنبه 30 مرداد 1393, 01:25 صبح
سلام
میشه راهنمایی کنید که چرا این فایل درست کار نمی کنه. می خوام وقتی login میشه به صفحه manager.php بره؟
<?php
session_start();
ob_start();

include_once 'db.php';

$token = md5(uniqid(rand(), TRUE));
$_SESSION['token'] = $token;

if(isset($_POST['submit']))
{
if (isset($_SESSION['token']) && isset($_POST['token']) && $_POST['token'] == $_SESSION['token'])
{
$uname=$pdo -> quote($_POST['username']);
$pass=$pdo -> quote($_POST['password']);
$salt='$2a$07$uawx$hgtriniursaklt$';
$pass = sha1(md5($pass.$salt));
$uname = htmlspecialchars($uname);
$data=$pdo->prepare('SELECT * FROM login WHERE username=:username AND password=:password');
$data->execute(array('username' => $uname , 'password' => $pass));
$numrows= $data -> rowcount();
if($numrows == 1)
{ $rows= $data -> fetch(PDO::FETCH_ASSOC);
$_SESSION['USERNAME']=$rows['username'];
$_SESSION['USERID']=$rows['id'];
$ua=$_SERVER['HTTP_USER_AGENT'];
$ip=$_SERVER['REMOTE_ADDR'];
$id=session_id();
$all="$ua $ip $id";
$all=sha1($all);
$_SESSION['hash']=htmlspecialchars($all);
header("location:".$url."/managment/manager.php");

}
else
{
header("location:".$url."/managment/index.php?error=1");
}
}
else
{
header("location:".$url."/managment/index.php?error=1");
}
}
else
{
if(isset($_GET['error']))
{
echo 'نام کاربری و کلمه عبور شما معتبر نیست.';
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>managment</title>
</head>

<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF'],ENT_QUOTES); ?>" method="post">
<label>Username:</label><br />
<input type="text" name="username" /><br />
<label>Password:</label><br />
<input type="password" name="password" /><br />
<input type="hidden" name="token" value="<?php echo $token ?>" />
<input type="submit" name="submit" value="Sign in" />
</form>

</body>
</html>

arash691
پنج شنبه 30 مرداد 1393, 01:49 صبح
چه خطایی میده ؟

saeed-71
پنج شنبه 30 مرداد 1393, 09:29 صبح
اینو به اول کدت خط اول اضاف کن


ob_start();

zahra-j
پنج شنبه 30 مرداد 1393, 10:58 صبح
چه خطایی میده ؟
هیچ خطایی نمیده فقط به صفحه manager.php نمی رود


اینو به اول کدت خط اول اضاف کن


ob_start();


این کد گذاشتم ولی فرقی نکرد

از نظر شما کد مشکلی نداره؟

saeed-71
پنج شنبه 30 مرداد 1393, 12:14 عصر
دابل کوتیشن استفاده کنید تو دستور هدر

zahra-j
پنج شنبه 30 مرداد 1393, 13:21 عصر
حالا username و password که درست وارد میکنم قسمت else اجرا میشه و میزنه نام کاربری و کلمه عبور شما معتبر نیست
password به این صورت در دیتابیس ذخیره کردم خروجی این کد

<?php
$salt='$2a$07$uawx$hgtriniursaklt$';
echo $pass = sha1(md5('aria12345'.$salt));
?>

zahra-j
پنج شنبه 30 مرداد 1393, 14:20 عصر
اساتید محترم کمک کنید کدها مشکلی ندارند؟

zahra-j
جمعه 31 مرداد 1393, 01:19 صبح
خواهش میکنم راهنمایی کنید خیلی ضروریه

arash691
جمعه 31 مرداد 1393, 01:36 صبح
از کوئری ساخته شده echo بگیرید و تو phpmyadmin اجراش کنید ببینید کار میکنه

hamedarian2009
جمعه 31 مرداد 1393, 02:38 صبح
این شرط
$_POST['token'] == $_SESSION['token'] برقرار نمیشه واسه همین میره تو else
چون اون سشن که تعریف کردی اولش یه مقداری داره بعد سابمیت کردن فرم صفحه رفرش میشه و سشن یه مقدار دیگه میگیره در نتیجه شرط تساوی برقرار نمیشه

zahra-j
جمعه 31 مرداد 1393, 14:39 عصر
به token یک مقدار ثابت دادم و تابع quote را حذف کردم درست شد میشه بفرمایید تابع quote چه مشکلی ایجاد می کرد و در صورت استفاده نکردن از نظر امنیت مشکلی پیش نمیاد؟

حالا در بالای هر صفحه مدیریت این کد رو می خوام وارد کنم از نظر امنیت چطوره؟

<?php
session_start();

if(isset($_SESSION['USERNAME']) == FALSE)
{
$ip=$_SERVER['REMOTE_ADDR'];
$fp=fopen("ip.txt","a");
fputs($fp,"$ip/n");
fclose($fp);
echo"<center>شما وارد سیستم نشده یا از زمان ورود شما زیاد گذشته</center>";

}
else
{
$ua=$_SERVER['HTTP_USER_AGENT'];
$ip=$_SERVER['REMOTE_ADDR'];
$id=session_id();
$all="$ua $ip $id";
$all=sha1($all);
$se=$_SESSION['hash'];
if($all != $se)
{
echo "error";
exit();
}
else
{
echo "hello";
}
}
?>

***BiDaK***
جمعه 31 مرداد 1393, 17:38 عصر
generate توکن رو هم بعد از else آخر بزار

***BiDaK***
جمعه 31 مرداد 1393, 18:57 عصر
به token یک مقدار ثابت دادم و تابع quote را حذف کردم درست شد میشه بفرمایید تابع quote چه مشکلی ایجاد می کرد و در صورت استفاده نکردن از نظر امنیت مشکلی پیش نمیاد؟

حالا در بالای هر صفحه مدیریت این کد رو می خوام وارد کنم از نظر امنیت چطوره؟

prepare هم کافیه برای واکشی از دیتابیس و هم توصیه شده.
اینجارو (http://php.net/manual/en/pdo.quote.php)هم میتونی ببینی.
اون کارای بالای صفحه هم نیازی نیست.
میتونی مقادیر داخل سشن رو هر دفعه در اول صفحه چک بشه که مقادیر داخل سشن با دیتابیس یکی هست یا نه.
میتونی از دستور session_regenerate_id() هم برای عوض شدن سشن آیدی استفاده کنی.