روش های گزاشتن کلمه عبور بر روی پروژه با استفاده از کوکی و ار تباطش با بانک mysql

iranmahfel

Member
سلام دوستان
غرض از ایجاد این تاپیک این بود که بتونم بهترین و امن ترین روش های گزاشتن کلمه عبور رو بر روی اسکریپت ها یاد بگیرم
راستش من پروژه زیاد طراحی کردم از جمله کانتر مجید آنلاین , سیستم اعلام نمرات , لینک باکس تمام داینامیک و ... خلاصه یه چیزهایی درست کردیم هر چند که وقتی امنیتش بالا نباشه به درد جرز لای دیوار هم نمی خوره
واسه همین می خوام که اساتید بزرگواری چون آقا مجید , آقا امید , و آقا سالار و بقیه که والا اسمشون یادم نیست الان هر کدام یه خورده از دریای علم خودشون مایه بزارن و مارو هم سرافراز کنند

من تا قبلا از اینکه تاپیک برنامه نویسی امن رو ببینیم از امنیت چیزی نمی دونستم و برنامه هام رو هم با
یک روش خیلی ساده با کلمه عبور محافظت می کردم و یک ضرر خیلی اساسی توی یک روز خوردم

چون یک هکر من رو تهدید کرد و من هم اهمیت ندادم و خلاصه کلمه عبور پروژه من رو بدست آورد و خلاصه گند زد به سایت من.
کد خیلی ساده ای که من استفاده می کردم و امروز که تاپیک امنیت شما رو خوندم و واقعا خودم هم خندم گرفت از کدم اینه که در زیر می گزارم

$password="iranmahfel";

if ($pass==$password){
// ادامه برنامه
}else {
echo "<br><p align='center'><font face='tahoma' style='FONT-SIZE: 9pt;' color='red'>کلمه عبور اشتباه است </font></p>";
}

که این کد واقعا هم خیلی بی خوده
حالا اگه شما دوستان یک کمی راهنمیی کنید ممنون می شم
مثلا همین انجمن و سایر برنامه های امن کلا روی چه حساب و کتابی نوشته شده اند که هک نمی شوند
چون اگه قرار بود که این انجمن هک بشه زودتر از این حرفا هک می شد
یک روش خیلی مطمئن که از کوکی ها و بانک mysql بهره ببره واقعا عالیه
واقعل در مورد کوکی ها اصلا چیزی نمی دونم راستش مقالات زیادی هم دیدم ولی فقط با کد هایی که توی اون مقاله استفاده شده جواب می گیرم و وقتی یه خورده کد رو تغییر می دهم بی نتیجه می مونم

سرتون رو درد نمی آرم عزیزان کمک کنید که هر چی ما بلدیم از سر خیر خواهی شما بوده و بس

مرسی بای
 

sama_sally

Member
md5 and functions

اساتید بزرگواری چون آقا مجید , آقا امید , و آقا سالار ....

عزیز، خیلی لطف داری که با این لحن ما رو صدا میکنی!! شوخی کردم!
ببین
یک کلمه عبور رو معمولا همینجوری نباید گذاشت توی صفحه.
مطمئن ترین روش اینه که اولا توی بانک اطلاعات بذاری (اکثرا mysql ) دوما با هر روشی که بلدی رمزیش کنی. متداولترین روش رمزی که مطمئن ترین هم هست (زیاد مطمئن نباش) استفاده از تابع md5 هست. این تابع کلمه عبور شما رو میگیره و به یک رشته 32 کاراکتری از حروف و اعداد تبدیل میکنه که هیچ راه برگشت و تابع مخالفی نداره. یعنی نمیشه با یه تابع یه رشته رمزی شده توسط md5 رو دوباره به کلمه اصلیش تبدیل کرد.

شما نباید فقط به رمز عبور متکی باشی.
همیشه حتما نام کاربری (برای مثال) رو چک کن و اگه مثلا یه کد امنیتی هم برای کاربر بذاری خیلی خوبه.
اول نام کاربری، اگه درست بود برو سراغ رمز عبور.
بعد از ثبت هر کاربر (برای مثال!) کلمه عبور اونو با md5 رمزی کن، وقتی خواست لاگین کنه؛ کلمه ای رو که وارد کرده بازم رمزی کن و با کلمه ای که قبلا ثبت کردی توی بانک اطلاعاتی مقایسه کن.
(مقدار رمزی شده هر کلمه توسط md5 اکثرا بکتا هست)
یعنی دو تا رمز رو با هم مقایسه کن اگه درست و دقیقا شبیه هم بودن اجازه ورود رو بده.

در ضمن
وقتی بررسی میکنی که کاربر لاگین کرده یا نه، هیچ وقت این کارو نکن:
PHP:
if($is_logged_in == "yes"){
//ادامه
}
چون میشه با این کار از سد سیستم گذشت:
کد:
http://www.site.com/sample.php?is_logged_in=yes

برای اینکار یه تابع بنویس:
PHP:
if(is_logged_in($_SESSION['username'])){
//ادامه
}
چون نمیشه تابع رو با query string و post گول زد.


به هر حال فکر نکنم توضیحاتم زیاد کامل باشه...
شرمنده...
موفق باشی!
 

oxygenws

Active Member
صحبت های سالار فکر کنم کامل بود، اما کمی مورد داشت....
1- md5 متداول ترین هست، اما بهترین نیست. (نمی دونم چی بهترینه، اما md5 نقص داره :) این یکی رو دوستان امنیتی بهتر می تونند جواب بدن)
2- در مورد تابعی که گفتید... روش های دیگه ای هم هست که بهتره.... یه جوارایی میشه گفت هیچ لزومی نداره که عبارت is_logged_in در برنامه برابر "yes" قرار بگیره.
3- کد شما (ایران محفل) با داشتن رمز عبور در متنش در حقیقت می تونه مشکلی به وجود نیاره.... اما کافیه یک صفحه روی سایت شما مشکل امنیتی داشته باشه، یا اینکه سرورتون مشکل پیدا کنه، در این صورت امنیت سایت شما از 100% به صفر درصد نزول می کنه :)

موفق باشید.
 

miladmovie

Active Member
من یک بار یکجای دیدم که واسه md5 یک کد واسط گذاشته بودند !
اصلا یادم نیست چه جور md5 ای بود ! اصلا یادم نیست کجا دیدم ! فقط خواستم بگم یک چیزی هست
(البته به غیر از mcrypt های php)
 

sama_sally

Member
1.gif

اگه وبلاگمو خونده باشي
يه پستش راجع به هك شدن md5 هست....
میدونم بهترین نیست
شاید بهترین کار اینه که
اول() base64_encode کنی بعد ()gzdeflate کنی ...
24.gif

نمیدونم...
 

oxygenws

Active Member
شاید بهترین کار اینه که
اول() base64_encode کنی بعد ()gzdeflate کنی ...
نمیدونم...

:) اصولا **بهترین** کار وجود نداره :)
همون md5 بکن، خیرشو ببینی، مطمئن باش اگر رمز عبورت درست باشه (سخت و طولانی!!) هک نمی شی، شاید چندین میلیارد قرن طول بکشه که پسوردت هک بشه (تاکید می کنم، "شاید!!")
 

iranmahfel

Member
عزیزان مرسی همین الان تجربیات شما رو می خوانم
چون واقعا انجمن های phpbb و گالری عکس 4imagesgalelry سایت من هک شده
نمی دونم چی کار باید بکنم
اگه راهکاری جلوی ÷ام بگزارید ممنون میشم
 

iranmahfel

Member
سلام عزیزان
آقا من مطالبتون رو خوندم ولی خوب یک نمونه یا یک مثال نزدید برای من؟

اصلا همین انجمن های وی بولتین یا پی اچ پی بی بی از چه راه کاری استفاده میکنه و از کوکی ها هم استفاده می کنه؟

من انجمن های پی اچ پی بی بی رو که اصلا فکر نمی کردم هک بشه به این راحتی ولی خوب متاسفانه مال من رو هک کردن

می خوام ببینم راه کارش چیه و چی کار کنم
یک اصول کلی و غیر قابل نفوذ را برام با کد مثال بزنید؟
مرسی
 

PC man

Active Member
sama_sally گفت:
وقتی بررسی میکنی که کاربر لاگین کرده یا نه، هیچ وقت این کارو نکن:
PHP:
if($is_logged_in == "yes"){
//ادامه
}
چون میشه با این کار از سد سیستم گذشت:
کد:
http://www.site.com/sample.php?is_logged_in=yes

برای اینکار یه تابع بنویس:
PHP:
if(is_logged_in($_SESSION['username'])){
//ادامه
}
چون نمیشه تابع رو با query string و post گول زد.

این رو هم اضافه کنم که در صفحه لاگین کد زیر اضافه کن تا در صورت تایید نام کاربری و رمز عبوری صحیح مقدار username رو به session ربط بده.و در غیر این صورت بازدیدکننده رو به صفحه ورود منتقل کنه.

session_start();

$username = $_POST[‘username’];
$password = md5($_POST[‘password’]);

$query = “select * from users where username=’$username’ and password=’$password’”;

$result = mysql_query($query);

if (mysql_num_rows($result) != 1) {
$error = “User not recognized!”;
include “login.html”;

} else {
$_SESSION[‘username’] = “$username”;
include “memberspage.php”;
}

?>

امیدوارم مشکلت حل شه:wink:


آقا مجید یه فکری به حال کد نویسی انگلیسی در فاروم ها بکن!.آخه این طوری که نمی شه کدها رو درهم برهم نوشت!
 

sama_sally

Member
این کد پی سی من جامع تر::
PHP:
<?php
session_start();

$username = $_POST[‘username’];
$password = md5($_POST[‘password’]);

$query = “select * from users where username=’$username’ and password=’$password’”;

$result = mysql_query($query);

if (mysql_num_rows($result) != 1) {
$error = “User not recognized!”;
include “login.html”;

} else {
$_SESSION[‘username’] = “$username”;
include “memberspage.php”;
}

?>
ببین ایران محفل جان
کوکی زیاد مهم نیست و در امنیت نقشی نداره و بعضی وقتها امنیت رو خدشه دار میکنه. کوکی فقط برای یاد آوری رمز عبور و از این جور کار هاست....
در ضمن
چه طوری هک شدی؟
 

PC man

Active Member
مرسی سالی از این که مرتبش کردی.نمی دونم چرا نمی تونم کدها رو مرتب بنویسم!!!؟
 

Majid

مدیر سایت
عضو کادر مدیریت
آقا مجید یه فکری به حال کد نویسی انگلیسی در فاروم ها بکن!.آخه این طوری که نمی شه کدها رو درهم برهم نوشت!

مشكل رفع شد

مجيد
 

iranmahfel

Member
سلام مرسی
عزیز این کد رو که دادی من توی لوکال تست کردم ارور در مرود سشن میده
این تابع session_start(); که اولش گزاشتی مال چیه چی کار می کنه یه کم توضیح میدی
در ثانی این کد رو با روش هایی که گفتین می شه راحت هک کرد یا خیر؟
مرزسی
 

sama_sally

Member
ببین
session_start باعث شروع شدن یک جلسه توی صفحه ( این برنامه php ) میشه
ما میتونیم متغیر ها رو توی session یا جلسه ثبت کنیم و در هر صفحه ای از برنامه از اون استفاده کنیم. session اطلاعات رو به طور موقت در یک پرونده در وب سرور ذخیره میکنه، هر session یک کد مخصوص داره که مخصوص این برنامه php هست.
ما میتونیم یک متغیر رو در صفحه اول (برای مثال) توی سشن این جوری ثبت کنیم:
PHP:
<?php
session_start();


$love = "Nastaran";
session_register($love);
?>
توجه: در هر صفحه ای که میخوایم از session استفاده کنیم، اوایل برنامه باید اینو بذاری: ;()session_start که باعث شروع شدن جلسه میشه
و برای مثال توی صفحه دوم اینطوری فراخوانیش کنیم:
PHP:
<?php
session_start();


echo $_SESSION['love'];
?>
که این کار برای مثال کلمه Nastaran رو چاپ میکنه

یک سشن بعد از بسته شدن پنجره تموم میشه. ولی میشه این کارو دستی کرد:
PHP:
<?php
session_start();


session_unregister($love); //فقط برای یک متغیر
//یا
session_unset(); //برای پاک کردن همه متغیر های درون جلسه

session_destroy(); //برای از بین بردن جلســـــه
?>

در ضمن، session خیلی امن تر از کوکی هست و راحت تر میشه باهاش کار کرد، ولی بازم باید مواظب باشی.


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

iranmahfel

Member
سلام
آقا من این لینک باکس رو خودم طراحی کردم
منتها توشط یکی هک شد واسه همین اینجا میگزام تا بهم
را ورود به برنامه را بگید که چه جوری می شود هکش کرد
مرسی
 

پیوست ها

  • linkbox v2.zip
    25.9 کیلوبایت · بازدیدها: 17

iranmahfel

Member
آقا با چیزهای که شما دوستان گفتین من یک اسکریپت نوشتم میگزام اینجا اشکالاتش رو بگین مرسی
به زودی می گزارم
 

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

بالا