PDA

View Full Version : سوال: ایجاد فایل change password



tohid5180
جمعه 22 دی 1391, 00:35 صبح
سلام دوستان.

من یه اسکریپت دارم ، اما متاسفانه قسمت پنل کاربر ، گزینه تغییر پسورد به این صورت عمل میکنه که پسورد جدید رو به ایمیل کاربر ارسال می کنه. میخوام این فایل طوری باشه که کاربر خودش پسورد رو تغییر بده نه اسکریپت.
ممنون میشم کمک کنید.

pani.khoram
جمعه 22 دی 1391, 00:43 صبح
سلام

سه کار می تونید انجام بدید ، یکی اینکه :
1 - خودتون بخش پروفایل رو جداگانه بنویسید و در پروژه اضافه کنید ، در واقع این بخش رو خودتان مجزا تولید کنید مجدد
2 - ان قسمت از اسکریپت شما که داره رمز عبور را ایجاد کرده و به ایمیل ارسال می کند را دستی ویرایش کنید و اجازه دهید کاربر رمز عبور جدید را همان جا وارد نماید .
3- یک لینک اعتبار سنجی به جای ارسال رمز عبور ایجاد کنید و این لینک برای ایمیل کاربر ارسال شود و در صورتی که کاربر رویه لینک کلیک کرد ، وارد صفحه ای از سایت شما شود که رمز عبور درخواستی جدید کاربر گرفته شده و در صورت صحیح بودن ویرایش شده و ایمیل تاییده ارسال شود . این طوری هم از ایمیل کاربر مطمئن هستید و کار راحتی هم هست .

موفق باشید

tohid5180
جمعه 22 دی 1391, 00:49 صبح
همین گزینه دوم خوبه. چطور میشه انجامش داد؟

اینم متن فایل :


<?php
$getPageTitle="تغییر کلمه عبور";


function getContentTpl(){
include '../db_connect.php';
?>
<div class="getContentBox">
<div class="content_top"><div class="getTitleContent">تغییر کلمه عبور</div>
</div>
<div class="content_bg"><div class="cop">
<center>



<table width="80%" border="0" cellpadding="1" cellspacing="0" align="center">
<tr>
<td align="center" > <br>
ايميل خودرا جهت دريافت رمز جديدواردكنيد
<form name="form1" method="post" action="">
<br>
<input type="submit" name="Submit" value="Send" class="btn">
<input name="email" type="text" id="email" size="40" dir="ltr"><strong>:Email</strong>


</form></td>
</tr>
</table>
<?php

error_reporting(0);
if ($_POST['Submit']=='Send')
{
$host = $_SERVER['HTTP_HOST'];
$rs_search = mysql_query("select email from user where email='$_POST[email]'");
$user_count = mysql_num_rows($rs_search);

if ($user_count != 0)
{
$newpwd = rand(10000,999999);
$host = $_SERVER['HTTP_HOST'];
$newmd5pwd = md5($newpwd);
mysql_query("UPDATE user set pass='$newmd5pwd' where email='$_POST[email]'");
$message =
"You have requested new login details from $host. Here are the login details...\n\n
User Name: $_POST[email] \n
Password: $newpwd \n
____________________________________________
*** LOGIN ***** \n
To Login: http://$host/login.php \n\n
_____________________________________________
Thank you. This is an automated response. PLEASE DO NOT REPLY.
";

mail($_POST['email'], "رمزجديد", $message,
"From: \"Auto-Response\" <robot@$host>\r\n" .
"X-Mailer: PHP/" . phpversion());

echo ('<center><font color="#0000FF">رمزجديد به ايميل شما ارسال شد</font></center><br>');
} else
echo ('<center><font color="red">كاربري با اين ايميل ثبت نشده است</font></center><br>');
}
?>



</center>
</div>
</div>
<div class="content_bt"></div>
</div>
<div class="clear"></div>
<?

}
include '../jdf.php';
include 'getTheme.php';
?>

pani.khoram
جمعه 22 دی 1391, 01:05 صبح
برای ویرایش فایل یه سوال ، این کد برای وقتی است که کاربر وارد پنل شده و می خواد تغییر رمز بده یا برای یادآوری رمز عبور ؟؟؟ کد را ویرایش می کنم می گذارم

pani.khoram
جمعه 22 دی 1391, 01:17 صبح
این ساده ترین حالت ممکنه ، کاربر رمز عبور درخواستی خودش رو هم همزمان با ایمیل وارد کنه که البته نیاز است شما رمز عبور قبلی رو هم بگیری و می تونی با همین شیوه کد رو کامل کنید
من چند خط کدی رو که ویرایش کردم دو خطه که در کد زیر می تونی جایگزین کنید




<form name="form1" method="post" action="">

<input type="submit" name="Submit" value="Send" class="btn">
<input name="email" type="text" id="email" size="40" dir="ltr"><strong>:Email</strong>
<input name="newpass" type="text" id="newpass" size="40" dir="ltr"><strong>:new password</strong>
</form>


$newpwd = $_POST['newpass'];
$host = $_SERVER['HTTP_HOST'];
$newmd5pwd = md5($newpwd);
mysql_query("UPDATE user set pass='$newmd5pwd' where email='$_POST[email]'");


موفق باشید

siavashsay
جمعه 22 دی 1391, 01:24 صبح
دوست عزیز !
منظتر کد آماده نباش ! ضمنا بهتره که در صفحه تغییر رمز - رمز عبور قبلی درخواست شه ! و از لحاظ امنتی CSRF هم مورد نظر داشته باشید چون خیلی راحت میشه رمز عبور رو با CSRF هک کرد !
بنده یک کد نمونه واستون میذارم ! خودتون نسبت به متغیرهای خودتون تغییرات رو اعمال کنید !


<?php
session_start();
// Db Connect
?>
<!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>Untitled Document</title>
</head>

<body>
<?php
$username=$_SESSION['username']; // سشن کاربری خودتون رو تغییر بدید
if(isset($_POST['changePass']) && isset($_POST['token_key']) && isset($_SESSION['token_key'])){
if($_POST['token_key']==$_SESSION['token_key']){
$old_password=md5($_POST['old_password']);
$new_password=md5($_POST['new_password']);
$re_new_password=md5($_POST['re_new_password']);
if($new_password==$re_new_password){
$qryPass=mysql_query("SELECT `password` FROM `users` WHERE `password`='$old_password' WHERE `username`='$username'");
$objPass=mysql_fetch_object($qryPass);
$db_old_password=$objPass->password;
if($db_old_password==$old_password){
$upPass=mysql_query("UPDATE `users` SET `password`='$new_password' WHERE `username`='$username'");
}
if($upPass){
echo "Password Changed Successfuly";
}
}
}
}
$token_key=md5(microtime());
$_SESSION['token_key']=$token_key;
?>
<form id="form1" name="form1" method="post" action="">
<p>
<label for="old_password"></label>
<input type="text" name="old_password" id="old_password" />
</p>
<p>
<label for="new_password"></label>
<input type="text" name="new_password" id="new_password" />
</p>
<p>
<label for="re_new_password"></label>
<input type="text" name="re_new_password" id="re_new_password" />
</p>
<p>
<input type="submit" name="changePass" id="changePass" value="Change Password" />
<input name="hiddenField" type="hidden" id="hiddenField" value="<?php echo $token_key;?>" />
</p>
</form>
</body>
</html>

tohid5180
جمعه 22 دی 1391, 01:36 صبح
pani.khoram

میشه در فایلی که ضمیمه کردم انجام بدید؟ چون من از php سر در نمیارم.....ممنون

tohid5180
جمعه 22 دی 1391, 11:26 صبح
این ساده ترین حالت ممکنه ، کاربر رمز عبور درخواستی خودش رو هم همزمان با ایمیل وارد کنه که البته نیاز است شما رمز عبور قبلی رو هم بگیری و می تونی با همین شیوه کد رو کامل کنید
من چند خط کدی رو که ویرایش کردم دو خطه که در کد زیر می تونی جایگزین کنید




<form name="form1" method="post" action="">

<input type="submit" name="Submit" value="Send" class="btn">
<input name="email" type="text" id="email" size="40" dir="ltr"><strong>:Email</strong>
<input name="newpass" type="text" id="newpass" size="40" dir="ltr"><strong>:new password</strong>
</form>


$newpwd = $_POST['newpass'];
$host = $_SERVER['HTTP_HOST'];
$newmd5pwd = md5($newpwd);
mysql_query("UPDATE user set pass='$newmd5pwd' where email='$_POST[email]'");


موفق باشید

این ارور رو میده
كاربري با اين ايميل ثبت نشده است

tohid5180
جمعه 22 دی 1391, 11:37 صبح
دوست عزیز !
منظتر کد آماده نباش ! ضمنا بهتره که در صفحه تغییر رمز - رمز عبور قبلی درخواست شه ! و از لحاظ امنتی CSRF هم مورد نظر داشته باشید چون خیلی راحت میشه رمز عبور رو با CSRF هک کرد !
بنده یک کد نمونه واستون میذارم ! خودتون نسبت به متغیرهای خودتون تغییرات رو اعمال کنید !


بلد نیستم . چطوری باید انجام بدم؟

siavashsay
جمعه 22 دی 1391, 12:57 عصر
1بلد نیستم . چطوری باید انجام بدم؟
یعنی از PHP هیچی نمیدونید ؟! خوب اینکه خیلی سخت میشه واست !
در ضمن فایل شما رو نگاه کردم ! فوق العاده ناقص هست !
این چه اسکریپتی که با دادن یک ایمیل سریعا رمز اون رو عوض میکنه ؟!
به فرض ایمیل من هست a@b.com و ایمیل شما هست b@b.com
حالا میرم تو پنلم - تو قسمت تغییر رمز - بجای ایمیل خودم میزنم b@b.com
چیزی که من در اسکریپت شما دیدم این بود که با زدن ایمیل رمز اون ایمیل رو عوض میکنه و هیچ مقایسه و شرطی نداره که اصلا این ایمیل مال شما هست یانه !
در اینصورت من اومدم براحتی رمز شما رو عوض کردم !
بیخیال این اسکریپت بشید :) ظاهرا خیلی مشکلات دیگه ای باید داشته باشه !

tohid5180
جمعه 22 دی 1391, 16:07 عصر
میدونم خیلی ناقصه..... کاریش نمیشه کرد..... فقط همین مشکل حل بشه کفایت می کنه.

اگه شدنیه فایل رو بی زحمت واسم تصحیح کنید. ممنون

siavashsay
جمعه 22 دی 1391, 18:33 عصر
دوست عزیز نمیشه !
من اطلاعات کافی برای تغییر فایل شما رو ندارم ! باید بدونم نوع دریافت username و session های سایت شما و پیکر بندی اون چطوریه !

tohid5180
جمعه 22 دی 1391, 19:54 عصر
خوب از کجا میشه فهمید username و session ?

siavashsay
جمعه 22 دی 1391, 20:24 عصر
دسترسی به کل سورستون ! :)
آیا مقدور واستون ؟!

tohid5180
جمعه 22 دی 1391, 21:28 عصر
:افسرده:............................

siavashsay
جمعه 22 دی 1391, 21:43 عصر
کد صفحه ثبت نام یا لاگین رو اگر میتونید بذارید ( ثبت نام بهتره باز )
توی اونها باید بشه پیدا کرد !

tohid5180
شنبه 23 دی 1391, 00:32 صبح
ممنون برادر. ضمیمه شد.

siavashsay
شنبه 23 دی 1391, 12:19 عصر
این کد رو نوشتم ! تست کن ! خبرشو بده !
فقط توجه کن ! توی 2 تا قسمت که نوشتم :
//username در دیتابیس چک شود
اونجا توی Query ها اگر توجه کنی نوشته :
`username`='$username' توی دیتابیس ببین که فیلد username چی هست ! اگه username بود که هیچ ! اگر نه مثلا uname یا myusername بود کد کوئری های رو تغییر بده به اینصورت :
`myusername`='$username' یا هر چی دیگه که اسم فیلدت هست توی دیتابیس !


<?php
session_start();
$getPageTitle="تغییر کلمه عبور";


function getContentTpl(){
include '../db_connect.php';
?>
<div class="getContentBox">
<div class="content_top"><div class="getTitleContent">تغییر کلمه عبور</div>
</div>
<div class="content_bg"><div class="cop">
<center>
<?php
error_reporting(0);
$username=$_SESSION['myusername'];
if(isset($_POST['chPass']) && isset($_POST['token_key']) && isset($_SESSION['token_key'])){
if($_POST['token_key'] == $_SESSION['token_key']){
if(!empty($_POST['old_pass']) && !empty($_POST['new_pass']) && !empty($_POST['re_new_pass'])){
$old_pass=md5($_POST['old_pass']);
$new_pass=md5($_POST['new_pass']);
$re_new_pass=md5($_POST['re_new_pass']);
if($new_pass == $re_new_pass){
$qry=mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `pass`='$old_pass'"); // username در دیتابیس چک شود
$nr=mysql_num_rows($qry);
if($nr==1){
$qryUp=mysql_query("UPDATE `users` SET `pass`='$new_pass' WHERE `username`='$username'"); //username در دیتابیس چک شود
echo "کلمه عبور با موفقیت تغییر یافت ";
// end num rows
}else{
echo " کلمه عبور قبلی درست نمیباشد ";
}
// end check new passes
}else{
echo "رمز عبور جدید و تکرار آن برابر نیستند ";
}

//end empty
}
//end token
}
}
$token_key=md5(microtime());
$_SESSION['token_key']=$token_key;

?>
<form name="form1" method="post" action="">
<table width="400" border="0">
<tr>
<td width="199"><label for="old_pass"></label>
<input type="text" name="old_pass" id="old_pass"></td>
<td width="191">رمز عبور قبلی</td>
</tr>
<tr>
<td><label for="new_pass"></label>
<input type="password" name="new_pass" id="new_pass"></td>
<td>رمز عبور جدید</td>
</tr>
<tr>
<td><label for="re_new_pass"></label>
<input type="password" name="re_new_pass" id="re_new_pass"></td>
<td>تکرار رمز عبور جدید</td>
</tr>
<tr>
<td><input type="submit" name="chPass" id="chPass" value="تغییر رمز">
<input name="token_key" type="hidden" id="token_key" value="<?php echo $token_key;?>"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</center>
</div>
</div>
<div class="content_bt"></div>
</div>
<div class="clear"></div>
<?

}
include '../jdf.php';
include 'getTheme.php';
?>

هر error که پیش اومد بگو تا درستش کنم بازم !

tohid5180
شنبه 23 دی 1391, 12:31 عصر
فیلد همون username هستش

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

؟

siavashsay
شنبه 23 دی 1391, 12:50 عصر
بذار ببینم !
این صفحه بعد لاگین کردن هست یا نه ؟!
یعنی این صفحه واسه Reset کردن رمز هست یا تغییر رمز ؟!
این 2 تا باهم فرق دارنا !
بهم بگو این صفحه بعد لاگین کردن توی سایت هست یا نه ؟!

tohid5180
شنبه 23 دی 1391, 12:59 عصر
بعد لاگین کردن این صفحه قرار داره.

siavashsay
شنبه 23 دی 1391, 12:59 عصر
این کد رو دوباره استفاده کن ببین دقیقا Error Mysql چی هست ! بهم بگو !


<?php
session_start();
$getPageTitle="تغییر کلمه عبور";


function getContentTpl(){
include '../db_connect.php';
?>
<div class="getContentBox">
<div class="content_top"><div class="getTitleContent">تغییر کلمه عبور</div>
</div>
<div class="content_bg"><div class="cop">
<center>
<?php
error_reporting(0);
$username=$_SESSION['myusername'];
if(isset($_POST['chPass']) && isset($_POST['token_key']) && isset($_SESSION['token_key'])){
if($_POST['token_key'] == $_SESSION['token_key']){
if(!empty($_POST['old_pass']) && !empty($_POST['new_pass']) && !empty($_POST['re_new_pass'])){
$old_pass=md5($_POST['old_pass']);
$new_pass=md5($_POST['new_pass']);
$re_new_pass=md5($_POST['re_new_pass']);
if($new_pass == $re_new_pass){
$qry=mysql_query("SELECT * FROM `users` WHERE `username`='$username' AND `pass`='$old_pass'") or die (mysql_error()); // username در دیتابیس چک شود
$nr=mysql_num_rows($qry) or die (mysql_error());
if($nr==1){
$qryUp=mysql_query("UPDATE `users` SET `pass`='$new_pass' WHERE `username`='$username'") or die (mysql_error()); //username در دیتابیس چک شود
echo "کلمه عبور با موفقیت تغییر یافت ";
// end num rows
}else{
echo " کلمه عبور قبلی درست نمیباشد ";
}
// end check new passes
}else{
echo "رمز عبور جدید و تکرار آن برابر نیستند ";
}

//end empty
}
//end token
}
}
$token_key=md5(microtime());
$_SESSION['token_key']=$token_key;

?>
<form name="form1" method="post" action="">
<table width="400" border="0">
<tr>
<td width="199"><label for="old_pass"></label>
<input type="text" name="old_pass" id="old_pass"></td>
<td width="191">رمز عبور قبلی</td>
</tr>
<tr>
<td><label for="new_pass"></label>
<input type="password" name="new_pass" id="new_pass"></td>
<td>رمز عبور جدید</td>
</tr>
<tr>
<td><label for="re_new_pass"></label>
<input type="password" name="re_new_pass" id="re_new_pass"></td>
<td>تکرار رمز عبور جدید</td>
</tr>
<tr>
<td><input type="submit" name="chPass" id="chPass" value="تغییر رمز">
<input name="token_key" type="hidden" id="token_key" value="<?php echo $token_key;?>"></td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</center>
</div>
</div>
<div class="content_bt"></div>
</div>
<div class="clear"></div>
<?

}
include '../jdf.php';
include 'getTheme.php';
?>

tohid5180
شنبه 23 دی 1391, 13:07 عصر
Table 'setarehg_90.users' doesn't exist

siavashsay
شنبه 23 دی 1391, 13:20 عصر
دوست عزیز !
مشکل شما دیتابیس و table هست !
فایل db_connect خودتون رو یک نگاهی بندازید !

tohid5180
شنبه 23 دی 1391, 13:32 عصر
دیتابیس رو واستون پ.خ کردم

ممنون

siavashsay
شنبه 23 دی 1391, 13:52 عصر
دوست عزیز ! جدول اعضای شما USER هست نه USERS ! پس اون رو توی کوئری ها تغییر بدید ! اون s رو از آخرش بردارید !
نتیجه رو هم اعلام کن ببینم چی شد بالاخره ! :)

tohid5180
شنبه 23 دی 1391, 13:58 عصر
:قلب::قلب::قلب::قلب::قلب:

ممنون عزیز....... . نمیدونم چطور ازت تشکر کنم.

فدات

siavashsay
شنبه 23 دی 1391, 14:01 عصر
خواهش میکنم ! :)
موفق باشید !