امنیت بیشتر برای پسورد های ما ( پرش کنید ... )

سلام دوستان.
این تاپیک رو ایجاد کردم که هر کی از دوستان هر راه حل - پیشنهاد - ایده - شیوه و ... که دارند در مورد هر چه بالا بردن امنیت پسورد ها در وبسایت اینجا قرار بده تا همه استفاده کنند ( نمیدونم تاپیک تکراری هست یا نه - یه سرچ سطحی زدم ) پیشاپیش تشکر میکنم.


منتظریم ...
 

jhoseini

Member
بعد از پرشدن فرم ورود توسط کاربر :
1) بدست آوردن md5 نام کاربری و کلمه عبور به وسیله این و ارسال به سرور
2) ثبت md5(md5()) نام کاربری + کلمه عبور در session در حین فعالیت کاربر در وبسایت(در مورد کنترل سشن اطلاعات زیادی ندارم)
3) ثبت ای پی کاربر بعد از دریافت نام کاربری و کلمه عبور درست
4) در صورت عدم تطابق ای پی فعلی کاربر، با ای پی آخرین ورود کاربر، یک شماره پین به آدرس ایمیل کاربر ارسال بشه، و از کاربر درخاست شه تا شماره ای که یهش میل شده رو وارد کنه تا مجاز بودنش تایید بشه
5) استفاده از کد امنیتی تصویری
6) خاموش کردن autocomplete در فرم (<form autocomplete=off action= ...)
...
 
آخرین ویرایش:

my friend

Member
البته من ترجیح میدم که با یه سری تابع ساده یه پسورد هش شده رو که ممکنه از چند ده حرف تشکیل شده رو کوتاه کنم تا هم حجم کمتری بگیره و هم قابل بازگردانی نباشه...
( آخه شنیدم یه راه پیدا شده که md5 رو برمیگردونه... )
 

jhoseini

Member
md5 از طریق سعی و خطا باز میشه
یعنی یه سرور خفن میگیرن، شورو میکنن از 1 رقمی تا n رقمی رو میدن به سرور، md5 شو با md5 یی که قراره باز بشه مقایسه میکنن
که اونم با دوبار md5 گرفتن از کار میفته، چون دیگه احتمال پیداکردنش فرق چندانی با 0 نداره
gigglesmile.gif
 
یه راه حل :

به صورت رندوم 3 عدد ایجاد کنید با پسوردی که کاربر وارد کرده بچسبونید کنارش ( حالا یا چپ یا راستش یا یه جایی اون وسط پسورد اون شخص ( ولی جاشو بدونیدا ) ) در حالی که اون 3 عدد رندوم رو تو متغییر سیو کرده اید به همراه پسوردی که الان با اون 3 تا عدد کنار هم اند و هش کرده اید + یوزر نیم رو مثلا توی دیتا بیس میریزید - خوب حالا برا در آوردن پسورد ( لاگین ) اون 3 تا عدد رو که در قالب یک فیلد درون تیبل دارید بخونید بزاریدش کنار پسوردی که الان کاربرتون برای لاگین وارد کرده و هش کنید و با مقدار موجود پسورد در جدول مقایسه کنید .....

چطوره ؟
 

jhoseini

Member
یه راه حل :

به صورت رندوم 3 عدد ایجاد کنید با پسوردی که کاربر وارد کرده بچسبونید کنارش ( حالا یا چپ یا راستش یا یه جایی اون وسط پسورد اون شخص ( ولی جاشو بدونیدا ) ) در حالی که اون 3 عدد رندوم رو تو متغییر سیو کرده اید به همراه پسوردی که الان با اون 3 تا عدد کنار هم اند و هش کرده اید + یوزر نیم رو مثلا توی دیتا بیس میریزید - خوب حالا برا در آوردن پسورد ( لاگین ) اون 3 تا عدد رو که در قالب یک فیلد درون تیبل دارید بخونید بزاریدش کنار پسوردی که الان کاربرتون برای لاگین وارد کرده و هش کنید و با مقدار موجود پسورد در جدول مقایسه کنید .....

چطوره ؟

راه های زیادی برای گم و گور کردن پسورد هست
خود md5 هم همینکارو میکنه
بسته به نیاز، میشه از این حالت هم استفاده کرد
اما اگه قراره این کار توسط javascript انجام بشه(قبل از ارسال به سرور) فقط یخورده جناب هکر رو سرگرم میکنه،
نظر شما چیه؟
 

RainDigital

Member
خوب، نظرتون راجه به امنیت md5 چیه؟


چندین سایت برای کرک کردن md5 هت که یکیشون کار کرد.

نظر من برای این که نشه md5 رو کرک کرد اینه که:

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

دو سه بار md5 کنیم.

درهم و برهم از توابع

PHP:
crypt();
md5();
base64_encode();
base64_decode();

استفاده کنیم.

یه پیشنهاد جالب!

اگر یه رشته ای که با
PHP:
base64_encode();

کد نشده باشه رو با

PHP:
base64_decode();

دیکود کنیم یه رشته عجیب و غریب بدست میاد! میشه از دیکودر به عنوان کد کننده استفاده کرد! ازین توابع در هم و برهم استفاده کنید. هکر مخش سوت میکشه
 

RainDigital

Member
راه های زیادی برای گم و گور کردن پسورد هست
خود md5 هم همینکارو میکنه
بسته به نیاز، میشه از این حالت هم استفاده کرد
اما اگه قراره این کار توسط javascript انجام بشه(قبل از ارسال به سرور) فقط یخورده جناب هکر رو سرگرم میکنه،
نظر شما چیه؟
پیشنهاد خوبیه!

هم توی سرور بپیچونیم هم توی لوکال.

(پیچاره هکرا):Evil:
 
این تاپیکو زدیم که همین راه های زیاد رو بگیم ....
خود md5 هم همینکارو میکنه
بله - اما همون مسئله کجا قرار گرفتن ( چندیمین حرف پسورد ) ادغام اون با اعداد رندوم رو باز هم میشه یه فیلد قرار داد مثل عدد 1 تا 7 اسم فیلد هم میزاریم مثلا data_now - هکر هم به ذهنش نمیرسه این فیلد چی بوده و اصلا برا چی قرارش دادیم - مثلا فکر میکنه که n امین روز هفته بوده که کاربر رجیستر کرده - از طرفی هم توی فرم میزاریم که حداقل تعداد کلمه عبور 8 رقم باشه مثلا .... ( کارای جالبی با همین ایده میشه انجام داد ) بعدش که این کارا رو کردیم بازم md5 رو استفاده میکنیم و ...

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

jhoseini

Member
بنظر من سایتای مثل ایــن نمیتونه از کارایی md5 کم کنه، نهایتا، با چند بار md5 گرفتن، یا روش های جالبی که Ser.RainDigital گفتن میشه از پسش بر اومد

این کار سمت سرور انجام میشه. :)
خوب، فکر میکنم انتقال پسورد اصلی، همینطوری بدون تشریفات امنیتی
200.gif
فرصت خوبی برای منافقین صدام! ایجاد میکنه تا ...
فکر میکنم، کد گزاری از cliend + server موثر تر باشه

در مورد ssl هم یه توضیحی بدید
+ یه توضیح در مورد نحوه encryption توسط md5
 
آخرین ویرایش:

alireza82

Well-Known Member
سلام
به نظر من هرچیزی رو باید به اندازاش خرج کرد! اگر قراره مثلا یه سایتی در حد یه سایت دانلود یا فاروم یا از این جور سایت ها کار کنه به نظر من یکی همین md5 بسشه! البته شکستن کد md5 به این راحتی ها هم که دوستان گفتن نیست و احتمال اون 0.0001 در هزار هست!
اما خوب یه وقت هم هست قراره شما مثلا سایتی مشابه پی پال راه بندازی که خوب هرچی امنیت رو ببری بالا چه تو کلمه عبور و ... کم کار کردی!
به نظر من اگر قرار هست از تو سایتی از امنیت بالا استفاده بشه به طوری که هیچ چیزی قابل فهم نباشه باید 2 کار حتما انجام شه!
1- استفاده از SSL
ssl میتنی بر یه سری الگوریتم های نامتقارن هست. مثل DES و RSA که اکثرا الگوریتم رو RSA انتخاب میکنن.
این الگوریتم ها به این صورت کار میکنن که دوتا کلید دارن یه خصوصی یه عمومی ! هر داده ای که با کلید خصوصی رمز شه با کلید عمومی از حالت رمز خارج میشه و بلعکس . پس شما کلید خصوصی رو برای خودت نگه میداری و کلید عمومی رو میدی به کاربر ( اکر سایتی که SSL داره رو اون قفل زرد رنگ پایینش کلیک کنید ( دوبار) اطلاعات کلید عمومی رو میده و قادرید گواهینامه تایید هویت رو نصب کنید) البته نیازی نیست چون خود مرورگر میفهمه چیکار کنه!
پس اطلاعات شما با توجه به کلید عمومی ای که کاربر داره میتونه باز شه بنابراین انتخاب مناسبی به تنهایی نیست. چون کاره این پروتکل برقراری ارتباط امن بین گیرنده اطلاعات و فرستنده هست! و عدم لو رفتن اطلاعات برای شخص ثالث نه سرویس گیرنده و سرویس دهنده!
2- استفاده از الگوریتم هایی مثل RSA به صورت جداگانه!
خوب گفتیم RSA دو تا کلید داره ( پیاده سازی الگوریتمش هم نسبتا سادست تو اینترنت هم ریخته) شما دوتا کلید با این الگوریتم درست میکنی و جفتش رو برا خودت تو یه سشن نگه میداری! حالا چیزهایی که نمیخوای لو بره با کلید خصوصیت میگیری و رمز میکنی!
موقع بازگشت هم اون دیتا رو با کلید عمومی از رمز خارج و کاری که میخوای رو انجام میدی!
الگوریتم RSA برای کار نیاز به 2 عدد اول داره که هرچی این اعداد بزرگتر باشن بهتره! استفاده از اعداد بزرگ کار رو برای هکر سخت میکنه!
اصلا بزارید الگوریت رو بگم:
سيستم رمز نگاري كليد عمومي RSA (RJVEST-SHAMIR-DLEMAN ):

به دليل برتري هاي بالقوه رمز نگاري كليد عمومي ،بسياري از پژوهشگران شروع به كار جدي براي اين منظور كردند والگو ريتم هاي جديدي پيشنهاد شد .يكي از اين الگو ريتم ها الگو ريتم RSA است كه در دانشگاه MIT و به وسيله ريوست شاميرووآدل من در سال 1978 اختراع شد . اين الگو ريتم مبتني بر اصولي از نظريه اعداد است وبه صورت زير بيان مي شود .
1)دو عدد اول بزرگ q.وp را انتخاب كن طوري كه هركدام بزرگتر 100^10 مي باشد
2) n=p.q وz=(p-1)(x-1) را محاسبه كن
3)يك عدد اول نسبت به z انتخاب ونام انرا d بگذار
4)e را طوري پيدا كن كه e.d=1mod z
با محاسبه اين پارامترها مي توان رمز نگاري را اغاز نمود .متن ساده كه به صورت رشته بيتي به ان نگاه مي شود .به بلوك هايي تقسيم مي شود به طوري كه هر پيغام متن ساده p دربازه .0<=p<=n بيافتد اين كار گروهبندي متن ساده به بلوك هاي k بيتي (Kبزرگترين عددي كه 2k<n )انجام مي شود براي رمز گذاري پيغام c=p^e(mod n),p محاسبه شده متن رمز شده c به دست مي ايد .براي رمزگشايي متن رمز شده, p=c^d(mod n) محاسبه شده ،متن ساده p استخراج مي شود .مي توان ثابت كرد كه براي همه p ها در محدوده مشخص تابع هاي رمز گذاري ورمز گشايي معكوس هم هستند.براي انجام رمز گذاري به e وn و براي رمز گشايي به d وn نياز است
------------------------------------------
خوب برای کرک این الگوریتم باید عواملشکسته بشن تا به اعداد اول برسیم و بتونیم کلید هارو بدست بیاریم!
نکته: در صورت استفاده از اعداد اول بالای 10 رقم با سریعترین کامپیوتر ها به چیزی در حدود 7 ماه زمان نیاز هست تا این الگوریتم شکسته شه!
خوب همونطور که گفتم کلید ها رو جفتش رو برای خودتون نگه دارید و کارهاتون رو بکنید بدون اینکه بترسید چیزی لو بره :D
( دوستان توجه کنید که امنیت خیلی چیز خوبیه اما 50% امنیت به نظر من یکی دست کاربر استفاده کننده است. مثلا کاربری که رو سیستمش کی ل.گر نصب شده باشه حالا شما بیا خودت رو بکش هزاربار md5 کن چه میدونم RSA استفاده کن از SSL استفاده کن 4 با از base64 استفاده کن همه این ها رو بیار DES کن ... اما چه سود که کلمه عبوری که نمیخواستی لو بره از همون اول لو رفته بود!:D)
ولی در آخر به نظر شحصه بنده:
هر چیزی باید به جا استفاده شه برای ایجاد یک ارتباط امن استفاده از یه SSL در کارهای معمولی از سر سایت هم زیاده!
تازه ساتی که مثلا فروشگاه باشه والا یه سایت مثلا دانلود همینم نمیخواد!) البته نظر شخص من بود و نظر هر کس دیگه ای هم در جای خودش محترم
 

alireza82

Well-Known Member
یه توضیح در مورد نحوه encryption توسط md5؟
که jhoseini خواسته بود! ابته یک توضیح کوچیک
ببینید بر خلاف اون چیزی که تصور میشه md5 یه الگوریتم رمزنگاری یا همون encryption نیست بلکه یه الگوریتم هش (hash) هست.
الگوریتم های هش مثل mad5 , md2, rc5 , rc2 و ... اینها الگوریتم های رمزگذاری نیستند چرا که یک طرفه هستند.
در واقع اینها میان هر پیامی که شما بهشون بدید حالا میخواد یه متن n کاراکتری باشه یا یه متن 1 کاراکتری ، میان یک خلاصه پیام یا اثر انگشت ازش میگیرن با توجه به الگوریتم خودشون. این اثر انگشت یک چیز یکتاست و معمولا یک رشته 32 کاراکتری ایست.
حالا گفتیم اثر انگشت یا fingerprint چرا ؟ چون که این مثل اثر انگشت هر آدم یک دونه است و درواقع هیچ دومتنی یه اثر انگشت ندارن مگر اینکه اون دو متن یکی باشن.
توابع هش توابعی یک طرفه هستند که الگوریتمشون طوری طراحی شده که عملا مهندسی معکوسشون ناممکن باشه!

MDF و md5 :
اينگونه الگو ريتم توسط ريوست طراحي شده اند وبدين ترتيب عمل مي كنند كه وروديها با اندازه متغير را مي گيرند ويك مقدار 128 بيتي به نام hash يا خلاصه پيام بر مي گردانند.
Sha :اين الگوريتم نيز وروديها به اندازه متغير را مي گيرد ويك مقدار 160 بيتي ايجاد مي كند كه در مقايسه با دوالگوريتم قبلي امنيتش بيشتر است .چون خلاصه توليد شده توسط sha بلندتر از خلاصه پيام توليد شده توسط md4 وmd5 مي باشد ودر نتيجه شكستن ان مشكلتر است.

موفق باشید
 

alireza82

Well-Known Member
ظاهرا پست من گم شده! (ان شاءالله سهواً)!! اما اگه تشخيص داده شده كه نظرات بنده فاقد ارزش علمی لازمه است من ميرم تا اطلاعاتم رو افزايش بدم.

سلام
نه عمویی حتما پستت نیومده . چون اگر پستی توسط مدیر یا حتی کاربر حذف بشه جاش میمونه! تابلو میشه که حذف شده!
یه بار دیگه ارسال کن!
 

jhoseini

Member
حالا که جو سکیوریتی جوره، یه بحثی هم راجه به مدیریت session بکنید
استفاده از سشن باز، به چه صورته؟
آیا ربطی به کیفیت و تنظیمات هاست داره؟
آیا میشه بجای سشن از دیتابیس استفاده کرد؟ مثل کاری که تو بعضی جاهای postNuke من دیدم، که متغیر ها رو هی با <input type=hidden> به جلو میبرد

و یه چیزه دیگه
بعضی نرم افزارا هست که سایت رو اسکن میکنه و حفره ها + مشکلات امنیتی شو لیست میکنه، نمونه ای از این ابزار ها دارید؟

:)
 

alireza82

Well-Known Member
سلسه نكات امنيتي نكته شماره #2
نكته امنيتي امروز ما مربوط مي‌شود به يكي از مهمترين و حساس‌ترين ابزارهاي امنيتي، نوعي حمله مربوط به آن و روش پيش‌گيري از اين حمله به شكلي صحيح خوب همانطور كه شايد برخي از شما حدس زده‌ايد امروز مي‌خواهيم در رابطه با جلسه‌ها(Session) باهم صحبت كنيم:
يكي از حملات بسيار مرسوم در مجموعه حملات شناخته شده تحت وب حمله موسوم به Session fixation هست كه نفوذگر در طي آن سعي دارد با شبيه جلوه دادن خود به كاربران به اطلاعات موجود در جلسه آنها دسترسي يابد. مهمترين و حساس‌ترين اطلاعات براي نفوذگر در اين شرايط چيست؟ خوب همانطور كه احتمالاً شما هم مي‌دانيد Session ID هسته اصلي اين نوع نفوذ خواهد بود در واقع Session ID كليدي است كه مي‌توان باداشتن آن ثابت نمود كه من كاربر X و شما كاربر Y هستيد و حالا اگر من كليد شما را به طريق بدست بياورم مي‌توانم خودم را جاي شما جابزنم و...
خوب پس از اين مقئمه براي دوستاني كه مي‌خواهند كمي بيشتر درمورد Session Fixation اطلاعات كسب كنند مرجع هميشگيمان http://www.wikipedia.com را پيشنهاد مي‌دهم كه مي‌توانيد توسط http://en.wikipedia.org/wiki/Session_fixation مستقيم به تارنماي دايرة المعارف ويكي‌پديا بخش مربوط به session fixation متصل گريدد.
خوب تا ايجا متوجه شديم كه برروي هاست‌هاي مشترك خطري با چنين محتوي نرم‌افزار ما را تهديد مي‌نمايد اما به واقع چگونه مي‌توان از چنين حفره‌هايي پشتيباني كرد و راه عبور را بر نفوذگران بست، ساده است چنانچه دائما احتمال به سرقت رفتن كليد خانه شما وجود داشته باشد شما چه‌مي‌كنيد خوب واضح است كليد را دائماً عوض مي‌كنيد در اينجا نيز ما چنين مي‌كنيم:

PHP:
<?php
session_start();
if (!isset($_SESSION['initiated']))
{
session_regenerate_id();
$_SESSION['initiated'] = true;
}
?>
اما نكته‌اي در اينجا مطرح مي‌شود و آن اينكه با رفتن به آدرس اين صفحه در شاخه (پيش فرض) /tmp شما چنين چيزي مشاهده خواهد شد:
sess_82c6980017e100277a63983142fd454c
sess_a4bab88e6dfa6e900ade21e3fbd27a53
و اگر مجدداً صفحه را اجرا نمائيد:
sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c
و مجدداً:
sess_984c5230acca90b5a75eddb89bb48354
sess_a4bab88e6dfa6e900ade21e3fbd27a53
sess_82c6980017e100277a63983142fd454c
sess_dd88c05b724d80b30c90309847f2e919
براي اجتناب از چنين وضعيتي كافيست تا كد خود را به اين شكل اصلاح نمائيد:

PHP:
<?php
session_start();
if (!isset($_SESSION['initiated']))
{
$_SESSION['initiated'] = true;
session_regenerate_id(true);
}

?>
این مقاله درمورد امنیت در سشن ها و از سایت iranphp.net میباشد
 

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

بالا