PDA

View Full Version : ذخیرهء امن پسورد کاربران



eshpilen
شنبه 01 بهمن 1390, 19:28 عصر
همه میدونن که پسورد کاربران رو نباید همینطور بصورت Plain text در دیتابیس ذخیره کرد.
اما چرا؟
علت اصلیش اینه که اگر هکر به محتویات دیتابیس دسترسی پیدا کنه، پسوردی رو که کاربر انتخاب کرده میفهمه و علاوه بر اینکه میتونه در سیستم لاگین کنه، یحتمل میتونه ازش برای نفوذ در سایر اکانتهای کاربر در سایتهای دیگر منجمله اکانت ایمیل کاربر و غیره استفاده کنه. انتخاب پسورد یکسان یا مشابه برای اکانتهای مختلف و در سایتهای مختلف توسط کاربران امر نامعمولی نیست.
شاید بگید اگر هکر محتویات دیتابیس رو زده پس دیگه نیازی به لاگین در سیستم از طریق فرم لاگین سایت نداره، اما جواب اینه که در موارد متعددی محتمل هست که هکر به دلایل مختلف تونسته محتویات دیتابیس رو بخونه ولی هنوز دسترسی بیشتر از این حد و کاملی به بقیهء سیستم پیدا نکرده (و شاید هیچوقت هم نتونه تا این حد دسترسی پیدا کنه). بنابراین با اینکه هش پسوردها رو داره اما بدون دونستن اصل پسوردها نمیتونه وارد اکانت کاربران بشه، چون در فرم لاگین فقط اصل پسورد قابل استفاده است، نه هش اون. ضمنا بحث نفوذ در سایر اکانتهای کاربر در سایتهای دیگر هم که گفتیم و مستقل از این قضیه است.
بخصوص اگر هکر پسورد ادمین رو دربیاره که خیلی بدتر میشه و هک کلی سایت رو خیلی راحتتر و سریعتر میکنه.
ضمنا نباید فرض کرد که تنها راه دسترسی به هش پسوردها از طریق هک مستقیم سایت توسط یک هکر حرفه ایه. بطور مثال ممکنه دسترسی به اطلاعات دیتابیس از طریق دسترسی به نسخه های پشتیبان دیتابیس حاصل شده باشه. حالا به هر علتی و هر شکلی و توسط هرکسی.

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

$hash=md5($password);
با اینکه از Plain text خیلی بهتره ولی هنوز هم کافی نیست.
یه زمانی از این روش استفاده میشد و ظاهرا کافی بود، اما به زودی ضعفها و سوء استفاده ها از این روش آشکار شدن و شکل گرفتن.
پسوردهایی که کاربران انتخاب میکنن اونقدری ضعیف هست که هش خیلی از اونها رو میشه با استفاده از حملات دیکشنری، Brute force، و Precomputed dictionary و rainbow table کرک کرد و پسورد اولیه رو بدست آورد. بشر در بخاطر سپردن پسوردها ضعیف هست و هر سال قدرت پردازشی و روشهای کرک پیشرفت کردن اما کیفیت پسوردهای بشر کم و بیش ثابت مونده. بخاطر همین نیاز به روشهای کاملتر و قوی تری برای سخت کردن کرک پسوردها بوجود آمد.
لازم به ذکر است که باید فرض کرد این حمله هایی که ذکر کردیم بصورت حرفه ای با رایانه ها و سرورهای قدرتمند و با برنامه های به شدت بهینه شده، یعنی نوشته شده به شکل کاملا بهینه ای با زبانهایی مثل سی و اسمبلی که سرعت بالایی دارن انجام میشن. ضمنا نباید فرض کرد که فقط از یک رایانه استفاده میشه. ممکنه از صدها و هزاران رایانه بصورت توزیع شده، و از سرویسهای آنلاین اجاره ای بسیار قدرتمندی مثل EC2 آمازون که برابر هزاران رایانهء قوی قدرت دارن برای این حمله ها استفاده بشه.
تعداد هش های ساده این که این قبیل سرویسها میتونن در یک ثانیه محاسبه کنن عدد بسیار بزرگی هست، چون الگوریتم هایی مثل md5 سرعت اجرای بالایی دارن و پردازش ناچیزی مصرف میکنن.

بطور خلاصه هرکدام از این حملات رو توضیح میدم تا بعدا که بهشون رجوع شد یه اطلاعات پایه ای داشته باشید:

- حملهء دیکشنری:
در این حمله لیستی از کلمات انگلیسی و پسوردهای متداول به ورودی الگوریتمی که برای تولید هش پسوردها استفاده کردیم داده میشه و خروجی با هش های سرقت شده مقایسه میشه. اگر خروجی یکی از پسوردهای این لیست مساوی با یکی از هش های سرقت شده باشه، پسورد کاربر بدست اومده.

- حملهء Brute force:
در این حمله تمام ترکیبات ممکن یک بازهء خاص از پسوردها چک میشه. بطور مثال تمام پسوردهای 4 تا 8 کاراکتری متشکل از حروف بزرگ و کوچک و اعداد. این حمله طبیعتا پردازش و زمان زیادی صرف میکنه، اما امروزه این قدرت و زمان اجرای بقدر کافی کوتاه میتونه در دسترس خیلی ها قرار بگیره.

- Precomputed dictionary:
این حمله همون حملهء دیکشنری هست با این تفاوت که هش تمام پسوردهای موجود در دیکشنری قبلا محاسبه و ذخیره شدن. بنابراین موقع حمله نیازی به پردازش سنگینی نداره و صرفا با یک جستجو با سرعت خیلی بالایی میشه هش موردنظر رو درصورت وجود پیدا کرد. این روش یک بار محاسبه رو انجام میده و بعد نتایج اون برای هر تعداد حمله در هر زمانی میتونن مورد استفاده مجدد قرار بگیرن که این باعث صرفه جویی زیادی در قدرت پردازشی مورد نیاز و زمان صرف شده در آینده میشه. اما طبیعتا الگوریتم و ورودیهای استفاده شده باید ثابت و یکسان باشن تا بشه این روش رو روی هش های یک دیتابیس بکار برد.

- rainbow table:
اگر بخوایم مقادیر هش یک حملهء Brute force رو که تعداد خیلی زیادی هش رو شامل میشه محاسبه و ذخیره کنیم تا هر بار نیاز به منابع پردازشی بسیار زیاد و صرف زمان طولانی نباشه، بخاطر تعداد بسیار زیاد پسوردهای ممکن و در نتیجه هش های تولید شده فضای ذخیره سازی مورد نیاز اونقدری زیاده که دسترسی به این فضای ذخیره سازی برای هکر غیرممکن یا بسیار گران و غیر مقرون به صرفه است. rainbow table یک روش هوشمندانه و نسبتا پیچیده است که میزان این فضای ذخیره سازی مورد نیاز رو به مقدار زیادی کاهش میده و به این شکل ذخیره سازی تعداد بسیار بسیار زیاد هش هایی که از طریق Brute force بدست میان در محدودهء قابل دسترس و صرفه برای هکرها قرار میگیره. ضمنا نمونه های این rainbow table ها در اینترنت موجود و قابل دانلود توسط همگان هست که در نتیجه کار هکرها خیلی راحتتر میشه و نیاز به توان پردازشی و زمان زیاد برای تولید این جدول ها ندارن. البته اینطور که مطالعه کردم و اگر درست فهمیده باشم، rainbow table ها محتوی تمام این هش ها بصورت کامل و نهایی نیستن و بنابراین موقع تست کردن هش ها نیاز به مقداری پردازش هم وجود داره، اما میزان این پردازش و زمان مورد نیاز، خیلی کمتر از Brute force عادی است. یعنی میشه گفت rainbow table یک ترکیب و تعادل میان میزان محاسبهء پیشاپیش و فضای ذخیره سازی، و محاسبه در زمان اجرا است. اما برای سادگی درک مطلب و مقایسه و تحلیل در این تاپیک، از یک دید ساده شده میتونیم بگیم rainbow table معادل یک Precomputed dictionary هست اما فرقشون اینه که تعداد هش های یک Precomputed dictionary خیلی کمتر از rainbow table هست و درحالیکه یک دیکشنری فقط شامل مثلا حداکثر یک میلیون یا کمتر و بیشتر از پسوردهای متداول میشه، یک rainbow table میتونه برای بدست آوردن هش کل ترکیبات ممکن کاراکترهای معین و کل پسوردهای ممکن با یک حداکثر طول خاص استفاده بشه.

امیدوارم استفاده کرده باشید. اگر استفاده کردید Thanks بزنید :لبخند:
بعد میریم سراغ روشهای جلوگیری یا حداقل خیلی سخت تر و کندتر کردن این حمله ها.
فعلا روی این موضوع زیاد کار کردم و خسته شدم، الان با اجازه دارم یه مقاله از ویکیپدیا راجع به لیزر (http://en.wikipedia.org/wiki/Laser_safety) میخونم.

رضا قربانی
شنبه 01 بهمن 1390, 20:52 عصر
جناب eshpilen اگه میشه یک نمونه کد برای استفاده از سالت رندوم و نحوه چک کردن صحت رمز واردشده با استفاده از این روش، بگذارید.


باشه به زودی یک تاپیک در این ارتباط میزنم. چون داستان باید گسترده تر و مفصل تر از این حرفا باشه.
علاوه بر دیشب، بیشتر امروز هم داشتم در این ارتباط مطالعه میکردم.
-----------------
تاپیک مورد نظر استارت شد: http://barnamenevis.org/showthread.php?324247

نمونه کد ؟

eshpilen
یک شنبه 02 بهمن 1390, 08:51 صبح
صبر کنن بابا. شما مثل من در عرض یک شب و یک روز حدود 50 صفحه مطلب نخوندی که عجله میکنی!
وقتی اینقدر بخونی و اطلاعات زیادی جذب کنی، کلی احتمالات و جزییات و حساب و کتاب به فکرت میاد که همه رو باید تحلیل کنی و تا حد امکان یه راه حل دقیق و کامل مطمئن ارائه بدی.
باید با حوصله و آرامش پیش بری. ضمنا من خواستم مطلب بصورت آموزشی قدم به قدم و مفهومی و با درک به دیگران منتقل بشه. وگرنه کد آمادش هم بود میتونستم همینطوری کپی پیست کنم! ولی انگار مردم عجله دارن و وقت ندارن روی یادگیری کامل و دقیق وقت و انرژی صرف کنن. همینطور فقط دنبال دوتا روش و کد برای حفظ و کپی پیست هستن.
سیستم ما از نوع پشمکی نیست که همینطور از خودم نظریه و روش و دو خط کد اشتباه درکنم!!
میدونی قبلا هم چقدر منابع خونده بودم؟ در طول چند سال.
تازه بعد از این همه مطالعه و پایه، خیلی چیزها رو تازه اخیرا کاملا فهمیدم! کم و بیش الان با مطالعه های اخیر بود که چیزهایی که خونده بودم همه به هم پیوستن و یک پیکرهء کامل رو تشکیل دادن. تا قبل از اون ذهنیت خودم هم پراکنده بود و متوجه نبودم در ذخیرهء پسورد باید همهء حمله ها رو درنظر گرفت و فقط یک روش و الگوریتم نیست که باید پیاده سازی کرد. فقط Salt نیست. سالت جلوی بعضی حمله ها رو میگیره یا تاحدی میگیره، نه جلوی همه رو.

خوندن و فهمیدن هم کار راحتی نیستا! مثلا کلی مطلب از سایتهایی مثل stackoverflow.com خوندم که یک نفر سوال میکنه و شونصد نفر جواب میدن. حالا این شونصد نفر هم یک درجه سواد و تجربه و اطلاعات ندارن که. بعضیا جوابهای ناقص و گمراه کننده یا کاملا اشتباه میدن. آدم اگر دانش پایهء لازم رو نداشته باشه و به دقت تمام نوشته ها رو نخونه و تحلیل و مقایسه نکنه، بعیده به جواب کامل و دقیق مطمئنی برسه. ضمنا با برنامه های حرفه ای هم که وجود دارن آدم باید یه مقایسه ای بکنه ببینه کدام روشها در اون برنامه ها بکار رفتن.

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

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

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

eshpilen
یک شنبه 02 بهمن 1390, 10:32 صبح
خب ما شروع میکنیم به طراحی یک سیستم برای تبدیل پسورد کاربران جهت ذخیره سازی.

چیزی که ما در حمله های فوق مشاهده میکنیم دوتاست:

1) پردازش تعداد زیادی هش با سرعت بالا (که نیاز به توان پردازشی بالایی هم داره، اما در دسترس است).

2) ذخیره سازی تعداد زیادی هش (که نیاز به فضای ذخیره سازی زیادی هم داره، اما در دسترس است).

پس ما باید حتی الامکان کاری کنیم که دستیابی به هر دوی این پارامترها برای هکرها غیرممکن یا تاحد امکان دشوارتر/محدودتر بشه. این باعث میشه درصورت سرقت هش پسورد کاربران، تعداد خیلی کمتری پسورد قابل بازیابی باشن و شانس موفقیت هکر به شدت پایین بیاد. طبیعتا همیشه ممکنه یکسری پسوردهای خیلی ضعیف باشن که با یک حمله با حداقل امکانات هم کشف بشن و قویترین سیستم ما هم نمیتونه جلوی این رو بگیره (بخاطر همین کاربران رو هم باید آگاه و راهنمایی کرد که سعی کنن پسوردهاشون تاحد ممکن قوی باشه). البته ما میتونیم یک Password policy بر کاربران تحمیل کنیم و پسوردهایی رو که انتخاب میکنن توسط برنامه در سمت سرور (و یحتمل در سمت کلاینت نیز برای راحتی بیشتر کاربران) چک کنیم، اما این به دلایل مختلف، توجیه کافی برای صرفنظر کردن از امن سازی هش پسورد کاربران نمیشه.

پس بیایم و هش کاربران رو امن کنیم!

خب چیزی که همه میشناسن Salt است.

سالت بصورت استاندارد یک رشتهء رندوم اضافی هست که موقع هش کردن به پسورد اضافه میشه و باعث میشه هش تولید شده کاملا تغییر بکنه. بنابراین سالت باعث میشه نشه از Precomputed dictionary یا rainbow table از پیش آماده شده برای کرک هش ها استفاده کرد. چون تا هکر اون سالت مربوط به هر پسورد رو ندونه نمیتونه هش های صحیح رو از قبل تولید کرده کرده باشه.
بطور معمول هکر هش ها رو بدون هیچ سالتی محاسبه کرده و فقط روی سیستمهایی که از سالت استفاده نمیکنن میتونه از اون هش های آماده استفاده کنه.

اما یک سالت مناسب باید چه خصوصیاتی داشته باشه و چطور با پسورد ترکیب بشه و چه الگوریتمی بر اونها اعمال بشه؟

طبیعتا یک سالت باید تعداد حالتهای ممکن بقدر کافی زیاد داشته باشه.
بعنوان یک مثال ساده اگر سالت ما یک عدد رندوم از 0 تا 999 باشه، ما در مجموع 1000 سالت مختلف خواهیم داشت. اما این سالت واضحا ضعیفی خواهد بود، چون محاسبه و ذخیرهء 1000 هش مختلف برای هر پسورد امر غیرممکنی نیست. یعنی تهیهء چنین Precomputed dictionary (یا به شکل هزار Precomputed dictionary مجزا) به هیچ وجه غیرممکن نیست. حتی تهیهء rainbow table هایی با این تعداد هش هم با امکانات پردازشی و ذخیره سازی امروزی غیرممکن نیست. به این شکل هکر میتونه از فرصت و توان پردازشی ای که قبلا در اختیار داره برای تهیهء پیشاپیش این هش ها استفاده کنه، و از طرف دیگه میتونه این هش ها رو بعدا روی هر برنامه و سایتی که از الگوریتم و ساختار سالت مشابهی استفاده میکنه بکار ببره.

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

برای اطمینان بنده شخصا از یک سالت بسیار بزرگ استفاده خواهم کرد. سالتی که تعداد حالتهاش از یک میلیون هم خیلی بیشتره. خب این خیلی مهم نیست که بخوایم سر بزرگی سالت چک و چونه بزنیم، شاید سالت من وسواسی باشه، اما هزینه و ضرر خاصی هم نداره. بعدم بهرحال یحتمل بنده خیلی بیشتر از شما منابع علم رمزنگاری رو خوندم و این چیزی که بنظر شما وسواس میاد بی دلیل نیست.

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

شرط دیگر اینکه که این سالت رندوم بزرگ باید به ازای هر اکانت کاربری متفاوت باشه.
سوالی که پیش میاد اینه که چرا؟ چرا نمیتونیم یک سالت تصادفی بزرگ برای کل کاربران یک سایت داشته باشیم؟
چند دلیل براش وجود داره که تاجاییکه یادمه میگم.
یک دلیل اینه که اگر سالت استفاده شده برای همه اکانتها یکی باشه، با محاسبهء یک هش با یک سالت مشخص، مقدار هش محاسبه میتونه روی هش پسورد تمام اکانتهای سایت شما (و نیز هر سایت و دیتابیس مشابه دیگری هم) تست بشه، نه فقط بر روی یک اکانت.
این مزیت میتونه در حمله های دیکشنری ساده و حدسها و Brute-force های کوچک کاملا به نفع کرکر باشه.

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

و سرانجام چرا نباید از چیزی مثل نام کاربری بجای سالت استفاده کرد؟ مگر نام کاربری به ازای هر کاربر متفاوت نیست و تعداد حالتهای زیادی نداره؟
باز اینهم دلایل مختلفی داره.
یک دلیل اینه که خیلی از نامهای کاربری هستن که همه جا در همهء سایتها دیده میشن و خیلی متداول و بعضا خیلی هم مهم هستن. مثلا اسمهای افراد، کلماتی مثل love و غیره یا نامهای کاربری ای مثل root، admin و غیره. همونطور که پسوردهای متداول داریم و بر این اساس حمله هایی طراحی شده و صورت میگیرن، نامهای کاربری متداول و حتی قطعی زیادی هم داریم.
بنابراین هکر حداقل میتونه دیکشنری ها و rainbow table هایی رو برای نامهای کاربری متداول و مهم، از قبل آماده کنه و ازش برای کرک تمام سایتهایی که از چنان الگوریتم و سالتی استفاده میکنن استفاده کنه.

البته بنظر بنده این ایدهء بدی نیست که نام کاربری رو هم به پسورد اضافه کنیم (علاوه بر سالت خودمون).
چرا؟ چون اگر در تولید رشتهء رندوم سالت ما مشکل و رخنه ای وجود داشته باشه و هکر بتونه اون رو کشف و ازش سوء استفاده کنه، وجود یک عامل دیگر میتونه تاحدی امنیت رو بالا ببره یا خسارت احتمالی رو پایین بیاره. البته این مسئله واقعا احتمال کمی داره (بخصوص که از الگوریتم های مخصوص تولید اعداد تصادفی امن که برای امور رمزنگاری بکار میرن استفاده کرده باشیم) و نام کاربری هم صرفا یک مقدار خیلی محدودی میتونه امنیت بده یا درواقع یحتمل از سوء استفادهء و موفقیت هکر با تمام قدرت ممکن، تاحدی جلوگیری کنه. بنابراین این مورد اجبار نیست و بنده هم احتمالا در کد پیشنهادی خودم که بعدا بهش میرسیم اون رو لحاظ نمیکنم، چون این عامل یک مقدار پیچیدگی و سایدافکت رو اضافه میکنه. مثلا اگر نام کاربری رو تغییر بدیم باید هش رو دوباره محاسبه کنیم. البته برای جلوگیری از این میشه راهکارهایی اندیشید (مثلا نام کاربری رو بصورت جداگانه و بعنوان بخشی از رشتهء سالت ذخیره کنیم)، اما بهرحال اینا همه پیچیدگی و ظرافت و نیاز به تحلیل و موارد پیشبینی نشدهء احتمالی رو پیش میارن. درکل میتونم بگم اگر یک سالت مناسب رو به روش مناسب تولید کنید، نیاز مهمی به چیزی مثل نام کاربری نیست. یک تابع رندوم امن، علاوه بر استفاده از عواملی مثل زمان و PID از یکسری منابع رندوم و مخصوص سیستم هم درصورت وجود استفاده میکنه و امنیت اون بقدر کافی بالا فرض میشه و در خیلی کاربردهای مهم امنیت و رمزنگاری نقش اساسی داره (هرچند بازم میگم که بنده با افزودن عوامل دیگر بعنوان مکمل، و نه جایگزین، مخالفتی ندارم). بعدا به بحث و ارائهء چنین تابعی خواهیم پرداخت.

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

MMSHFE
یک شنبه 02 بهمن 1390, 11:16 صبح
یک ایده:
برای هر کاربر یک سالت رندوم تولید کنیم و سالتها رو بهمراه نام کاربرها با ساختاری شبیه [user:salt] توی یک فایل بالاتر از پوشه www ذخیره کنیم. بعد این رو همراه با یک سالت ثابت که ازطریق htaccess. میخونیم، ترکیب کنیم. از اونجا که فایل نگهداری سالتها بالاتر از www هست، بدون دسترسی به کنترل پانل سایت، کسی بهش دسترسی نداره. حتی اگه سورس کد رو استخراج کنه! اگه کنترل پانل هم دست هکر بیفته که دیگه بهتره اصلاً بیخیال اون سایت بشیم و بریم از یک جای دیگه هاست بخریم چون امنیت هاستمون افتضاح بوده!!!

H:Shojaei
یک شنبه 02 بهمن 1390, 11:27 صبح
یک ایده:
برای هر کاربر یک سالت رندوم تولید کنیم و سالتها رو بهمراه نام کاربرها با ساختاری شبیه [user:salt] توی یک فایل بالاتر از پوشه www ذخیره کنیم. بعد این رو همراه با یک سالت ثابت که ازطریق htaccess. میخونیم، ترکیب کنیم. از اونجا که فایل نگهداری سالتها بالاتر از www هست، بدون دسترسی به کنترل پانل سایت، کسی بهش دسترسی نداره. حتی اگه سورس کد رو استخراج کنه! اگه کنترل پانل هم دست هکر بیفته که دیگه بهتره اصلاً بیخیال اون سایت بشیم و بریم از یک جای دیگه هاست بخریم چون امنیت هاستمون افتضاح بوده!!!
سلام
ببخشید وسط بحثتون سوالی داشتم
چطور میشه به پوشه بالا تر از www دست رسی پیدا کرد مثلا به پوشه ی mysql
mer30

eshpilen
یک شنبه 02 بهمن 1390, 11:34 صبح
یک ایده:
برای هر کاربر یک سالت رندوم تولید کنیم و سالتها رو بهمراه نام کاربرها با ساختاری شبیه [user:salt] توی یک فایل بالاتر از پوشه www ذخیره کنیم. بعد این رو همراه با یک سالت ثابت که ازطریق htaccess. میخونیم، ترکیب کنیم. از اونجا که فایل نگهداری سالتها بالاتر از www هست، بدون دسترسی به کنترل پانل سایت، کسی بهش دسترسی نداره. حتی اگه سورس کد رو استخراج کنه! اگه کنترل پانل هم دست هکر بیفته که دیگه بهتره اصلاً بیخیال اون سایت بشیم و بریم از یک جای دیگه هاست بخریم چون امنیت هاستمون افتضاح بوده!!!
این روش هیچ لزومی نداره.
جوابش رو در تاپیک دیگه دادم که در اینجا هم نقل میکنم:

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

ضمنا فرض نکنید که هکر هیچوقت نمیتونه htaccess یا مکانی بالاتر از www رو بخونه. همونطور که برنامهء شما میتونه این کار رو بکنه، هکر هم درصورت بدست آوردن دسترسی لازم و از چند روش و کانال مختلف میتونه به اون اطلاعات دسترسی پیدا بکنه.

eshpilen
یک شنبه 02 بهمن 1390, 11:39 صبح
سلام
ببخشید وسط بحثتون سوالی داشتم
چطور میشه به پوشه بالا تر از www دست رسی پیدا کرد مثلا به پوشه ی mysql
mer30
من با وبشل به بالاتر از www دسترسی دارم (البته تا دایرکتوری خانگی خودتون ممکنه).
پوشهء mysql رو تاحالا تحقیق نکردم دقیقا نمیدونم کجاست ولی فکر نمیکنم بشه (بخاطر مکان و owner و پرمیشن هاش).
ضمنا با وبشل میشه .htaccess رو هم خوند.

MMSHFE
یک شنبه 02 بهمن 1390, 11:44 صبح
عزیز یک وبشل به سایت من (ncis.ir) میزنی ببینی بالاتر از www چه فایلهایی دارم؟ اگه هاست اینقدر نا امن باشه، همون بهتر که سایت هک بشه. موفق باشید.

MMSHFE
یک شنبه 02 بهمن 1390, 11:46 صبح
راستی، از این به بعد توی همین تاپیک این موضوع رو پیگیری کنیم بهتره. بحث داره موازی توی دو تاپیک پیش میره که بنظرم خوب نیست.

eshpilen
یک شنبه 02 بهمن 1390, 11:59 صبح
عزیز یک وبشل به سایت من (ncis.ir) میزنی ببینی بالاتر از www چه فایلهایی دارم؟ اگه هاست اینقدر نا امن باشه، همون بهتر که سایت هک بشه. موفق باشید.
بله تا دایرکتوری خانگی رو میشه دید.
برنامه های شما هم تا همونجا دسترسی دارن حداکثر.
شما چطور با PHP اون فایلها رو میخونید اما با وبشل نمیشه؟!
وبشل هم داره تحت آپاچی و با همون اکانت اجرا میشه، تازه محدودیت هایی که ممکنه تنظیمات PHP روی دایرکتوری ها داشته باشه (open_basedir) رو هم نداره.

راستی، از این به بعد توی همین تاپیک این موضوع رو پیگیری کنیم بهتره. بحث داره موازی توی دو تاپیک پیش میره که بنظرم خوب نیست.
باید براش یه تاپیک دیگه مخصوص بزنیم. سر این سالت رندوم و ذخیره در دیتابیس و این حرفا که میگید اشتباهه و فایده ای نداره.
این تاپیک آموزشی رو بی جهت خراب نکنید.
اعلام موافقت کنید تا تاپیک مورد نظر رو استارت کنم.

MMSHFE
یک شنبه 02 بهمن 1390, 12:11 عصر
عزیز سرور من، پوشه www رو داخل دایرکتوری خانگی میسازه. برای همین اگه فایلی بالاتر از www بگذارم، با وبشل هم نمیتونید ببینیدش. موفق باشید.

MMSHFE
یک شنبه 02 بهمن 1390, 12:13 عصر
باید براش یه تاپیک دیگه مخصوص بزنیم. سر این سالت رندوم و ذخیره در دیتابیس و این حرفا که میگید اشتباهه و فایده ای نداره.
این تاپیک آموزشی رو بی جهت خراب نکنید.
اعلام موافقت کنید تا تاپیک مورد نظر رو استارت کنم.
هرچند موضوع بحث مرتبط با همین تاپیک هست و بی جهت نیست، اما باشه، موافقم در بحث جداگانه ای پیگیر بشیم. ضمناً اگه این بحث آموزشی هست، بهتره جدا از مطالب و نکات گفته شده، نمونه کد هم همراه با توضیح راههای نفوذپذیری اونها گذاشته بشه تا کاربردی تر باشه. صرفاً ارائه یکسری مطالب تئوریک رو نمیشه بحث آموزشی محسوب کنیم.
موفق باشید.

eshpilen
یک شنبه 02 بهمن 1390, 12:19 عصر
اجازه میدادی و بعدا درخواست میشد، تمام این موارد میتونست مطرح بشه.
شما خیلی عجله دارید انگار.
داستان گسترده تر و پیچیده تر از این حرفهاست. همونطور که میبینید.
تاپیک بحث دیگر رو الان استارت میکنم. لطفا این تاپیک رو دیگه به حال خودش بذارید تا مدتی که از اون بحث فارغ بشیم انشاا... .
ضمنا نه بنده همیشه بیکار هستم و نه شما. پس در بحث تاپیک دیگر هم عجله نکنید. به مرور زمان و در فرصتهای آزاد خودمون دنبال میکنیم. الکی هم که نیست، مطالعه و تست و آماده سازی کافی میخواد. فقط خوندن و تایپ مطالب کلی وقت و انرژی مصرف میکنه.

H:Shojaei
یک شنبه 02 بهمن 1390, 20:36 عصر
سلام دوستان شما تو فاز کل کل هستید و فکر کنم هیچ نکته ی آموزنده ای توی تاپیکهای php به چشم نمیخوره
آقای eshpilen اگه میشه به ادامه ی کارتون بپردازید در آخر که کد اصلی قرار داده شد اون وقت دوستان نظراتشون روبگن
با تشکر

رضا قربانی
دوشنبه 03 بهمن 1390, 10:04 صبح
صبر کنن بابا. شما مثل من در عرض یک شب و یک روز حدود 50 صفحه مطلب نخوندی که عجله میکنی!از کجا می دونی من نخوندم ؟
من که هنوز جایی نگفتم خوندم یا نخوندم !

روش هایی که MMSHFE http://barnamenevis.org/images/buttons/viewpost-left.png (http://barnamenevis.org/showthread.php?p=1424248#post1424248) گفته به نظر من هم امنیت بیشتری داره و هم خیلی ساده هست ! (مثلا همونی که با اچ تی اکسز گفته)

و اما نمونه کد ؟ (نمی خواد این جمله نمونه کد رو واسم بیست خط از جزییات و ... بگید)

eshpilen
دوشنبه 03 بهمن 1390, 12:18 عصر
از کجا می دونی من نخوندم ؟
من که هنوز جایی نگفتم خوندم یا نخوندم !

روش هایی که MMSHFE http://barnamenevis.org/images/buttons/viewpost-left.png (http://barnamenevis.org/showthread.php?p=1424248#post1424248) گفته به نظر من هم امنیت بیشتری داره و هم خیلی ساده هست ! (مثلا همونی که با اچ تی اکسز گفته)

و اما نمونه کد ؟ (نمی خواد این جمله نمونه کد رو واسم بیست خط از جزییات و ... بگید)
lol
شما دوتا خیلی با مزه اید.
ظاهرا هدفتون فقط رویارویی با بنده هست و عدم به نتیجه رسیدن این مباحث.
البته من میذارم شخصیت واقعی خودتون رو کاملا به دیگران نشون بدید و خودشون دربارش قضاوت کنن.

MMSHFE هم روش خاصی رو نگفته. سالت ثابت رو که ما هم داشتیم و بهش میرسیدیم. اختراع جدیدی و چیز نادانسته ای نیست و در منابع اومده. میشه درهرجایی هم ذخیرش کرد (غیر از دیتابیس). حالا چه htaccess باشه و چه سورس برنامه و چه خارج از WWW. پس این قضیه با سیستم ما هیچ منافاتی نداره؛ درواقع سیستم ما اون رو هم بعنوان جزیی از خودش داره و بیشتر از اون هم حساب شدگی و امنیت داره که اثباتش رو در تاپیک دیگه که راجع به خاصیت و اهمیت سالت رندوم به ازای هرکاربر توضیح دادم میتونید ببینید. در اون تاپیک ادعای جناب MMSHFE مبنی بر بیهوده بودن سالت رندوم به ازای هر اکانت و ذخیرهء اون در دیتابیس، کاملا رد میشه. با مثال و محاسبات روشن. بهرحال این سیستمی هست که من اختراع نکردم و متخصصان درجه یک طراحی کردن و همینطور هم استفاده میکنن.
حالا شما نمیتونید بفهمید یا الکی همینطوری میخواید اختلال ایجاد کنید و مشکل شخصی دارید دیگه فکر نمیکنم اینقدر مهم باشه. چون بهرحال من جواب روشن شما رو واسه هرکسی که یخورده سواد و هوش داشته باشه گذاشتم و خودشون میخونن و میفهمن.
درمورد تفاوت htaccess و کدمنبع یا خارج از www برای مکان ذخیرهء سالت ثابت هم چیز خاصی بنظرم نمیرسه. چون همش رو هکر درصورت داشتن دسترسی کافی برای آپلود فایل یا ویرایش فایلهای موجود میتونه بخونه.
جالبه که جناب MMSHFE نمیدونن وبشل چیه، چطوری کار میکنه، و اصلا تاحالا تست نکردن ببینن چه دسترسی ای به کجاها داره و فکر میکنن تفاوت و جادوی خاصی درکار هست که مثلا دسترسی به اون مکانهایی که خودشون میخوان با برنامهء PHP بخونن توسط هکر امکان پذیر نیست. میزان سواد و بینش ایشون در مسائل امنیتی در این موارد کاملا مشخصه. یا درواقع شاید هم شخصیت و نیت ایشون که فقط به قصد جلوگیری از روشن شدن واقعیت درمورد بنده و مطالب بنده سعی در تخریب و ایجاد ابهام و خراب کردن روند آموزش داشتن.

ضمنا نقص دیگر کد ایشون عدم وجود key stretching بود که یحتمل ایشون و شما تاحالا اصلا نمیدونستید چیه و چه خاصیتی داره.

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

eshpilen
دوشنبه 03 بهمن 1390, 12:38 عصر
نمونه کد گذاشتن هم ساده هست.
اما من اصلا اینقدر خواستهء شما رو منطقی نمیبینم و اهمیتی براش قائل نیستم که این کار رو الان بکنم.

باید قدم به قدم روشهای حمله و راهکارهای جلوگیری رو توضیح بدم و کد رو هم به همین شکل قدم به قدم طراحی میکنیم. این برنامهء تاپیک و ساختار مطالب آموزشی ای بوده که من درنظر داشتم و بنظرم روش اصولی و مفیدتریه. این دو خط کد رو نوشتن که کار حجیم و پیچیده ای نیست، من میتونم روی الگوریتم های خیلی پیچیده تر از این کار کنم. اصل این کار همون تئوری و تحلیل علمیش و محاسبات هست. دو خط کد پیاده سازیش هیچی نیست درمقابل اینا. فرق کیفیت و برتری کد من و کد MMSHFE و کسان دیگه از روی ظاهرش و اونم توسط افرادی که سوادش رو ندارن قابل تشخیص نیست. شما یا دیگران میتونید چیزی رو درش تشخیص بدید؟ سوادش رو دارید؟ پس برای چی الان دو خط کد بذارم تا شما با این شخصیت و نیت و هدف و رفتار زشت بیایید و هزار و یک اراجیف ببافید؟

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

گفتم به تدریج پیش میریم و به کد نهایی هم میرسیم.
دیگه شما چه حقی داری اومدی هی میگی کد کد!
واسه تو و MMSHFE کد بذارم؟
تو کی هستی و از کد گذاشتن واسه امثال تو چی حاصل میشه جز بهانه برای اعمال عقده و کینهء شخصی و حقه بازی که برای تو یک نفر کد بذارم؟
این تاپیک منه، آموزش منه، و شما هیچ حقی نداری بگی چکار کنم و چکار نکنم. بیش از اینهم تاپیک رو خراب کنی شخصیت خودت رو بیشتر ضایع کردی و مدیریت هم میتونه بررسی و رسیدگی کنه.

دو تا مطلب اصولی و مهم گذاشتم برای دیگران که یاد بگیرن، این دوتا اومدن فقط من و تاپیک رو خراب کنن.
واقعا که وجود و رفتار امثال شما مایهء شرمساری یک همچین فروم و محیط تخصصی هست که دو نفر اومدن یه چیزی یاد بگیرن. البته امثال شما کم هم نیستن بنظرم!

یه عده آدم بی سواد و بی فرهنگ وقتی خودشون رو زیاد گنده کنن و عنوان درست کنن واسه خودشون بعد یکی بیاد که ببینن داره ضایعشون میکنه، نتیجش فوران ابتذال از جانب این افراد هست. چیزی که در این چند روز و بحثها شاهدش بودیم و فکر کنم حداقل بعضی ها باید کاملا متوجه این واقعیت شده باشن.

eshpilen
دوشنبه 03 بهمن 1390, 13:28 عصر
عزیز سرور من، پوشه www رو داخل دایرکتوری خانگی میسازه. برای همین اگه فایلی بالاتر از www بگذارم، با وبشل هم نمیتونید ببینیدش. موفق باشید.
lol
من اینو تازه دیدم.
عجب!
جالبه.
وبشل از نظر دسترسی حداقل به اندازهء برنامه های PHP شما دسترسی خواهد داشت.
چون اونم توسط آپاچی و با اختیارات مشابه اجرا میشه.
بنابراین وقتی شما فایل میذاری بالاتر از www اگر بتونی با PHP اون فایل رو بخونی (که نیاز داری بخونی)، پس وبشل هم باید بتونه بخونه. نهایتش هم هکر خودش مستقیما با استفاده از PHP فایل شما رو میخونه. اصلا ضرورتی در وبشل نیست. هرچند وبشل من چون تحت Perl هست محدودیت هایی که ممکنه خود PHP اعمال کنه رو هم نداره.
این قضیه خیلی پیچیده و ناروشن هست؟!
ما در لینوکس یک دایرکتوری خانگی داریم برای هر کاربر.
خب www همه یه جایی توی اون دایرکتوری خانگیه. فکر کردی کجاست پس؟
شما انگار اصلا اینا رو نمیدونی و ندیدی که برای من عجیبه.

MMSHFE
دوشنبه 03 بهمن 1390, 15:34 عصر
عزیز من میدونم www توی دایرکتوری خانگی هست. اینقدر با کلمات بازی نکن که چهار نفر که اطلاعات کمتری دارن فکر کنن امنیت سرور در حد صفره! بله اگه درست کانفیگ نشده باشه، میتونید محتویات صفحه خانگی که سهله، تمام فایلهای توی www رو هم ببینید. محض رضای خدا اگه اینقدر کار برات راحته، محتویات دایرکتوری خانگی سایت بنده رو با همون وبشل Perl خودت که محدودیتهای PHP رو هم نداره، بخون اینجا بگذار ببینم درست میگی یا نه! با چند تا کلمه درشت و ادعاهای بی دلیل که نمیشه صحبت کنیم. اگه سرور درست تنظیم شده باشه و باز هم واقعاً بشه محتویات این پوشه ها رو اینقدر راحت دید، پس تلاش برای امنیت و سالت و... همه بی پایه و اساسه چون سورس کدها در اختیار همه خواهد بود و طبیعتاً هکر میدونه سالت ثابت کجا ذخیره میشه و سالت رندوم کجا و چطور اینها ترکیب میشن و رمز نهایی رو میسازن. خودت یکم فکر کن، بعد ادعا!

eshpilen
دوشنبه 03 بهمن 1390, 18:32 عصر
عزیز من میدونم www توی دایرکتوری خانگی هست. اینقدر با کلمات بازی نکن که چهار نفر که اطلاعات کمتری دارن فکر کنن امنیت سرور در حد صفره! بله اگه درست کانفیگ نشده باشه، میتونید محتویات صفحه خانگی که سهله، تمام فایلهای توی www رو هم ببینید. محض رضای خدا اگه اینقدر کار برات راحته، محتویات دایرکتوری خانگی سایت بنده رو با همون وبشل Perl خودت که محدودیتهای PHP رو هم نداره، بخون اینجا بگذار ببینم درست میگی یا نه! با چند تا کلمه درشت و ادعاهای بی دلیل که نمیشه صحبت کنیم. اگه سرور درست تنظیم شده باشه و باز هم واقعاً بشه محتویات این پوشه ها رو اینقدر راحت دید، پس تلاش برای امنیت و سالت و... همه بی پایه و اساسه چون سورس کدها در اختیار همه خواهد بود و طبیعتاً هکر میدونه سالت ثابت کجا ذخیره میشه و سالت رندوم کجا و چطور اینها ترکیب میشن و رمز نهایی رو میسازن. خودت یکم فکر کن، بعد ادعا!
چی؟!
مثل اینکه شما بد متوجه شدی!!
فکر کردی من میگم همینطوری زرتی میشه محتویات فایلهای سایتهای دیگه رو خوند؟!
اشتباه برداشت کردی.
مگه همچین چیزی میشه؟
کل سیستم هش امن برای پسورد کاربران بر اساس این فرض هست که اگر یه زمانی از هر طریقی سایت رو هک کردن یا به هر دلیل و شکل دیگری اطلاعات دیتابیس و سورس و تشکیلات سایت دست افراد نااهل افتاد، نتونن پسوردهای اصلی کاربران رو به این راحتی کشف کنن. اینکه سایت هک بشه و اطلاعات شخصی کاربران مثل ایمیل و غیره به سرقت بره بده، ولی اینکه اصل پسورد اونها رو هم بفهمن اوضاع رو خیلی بدتر میکنه و تمام اکانتهای کاربران رو روی سایتها و سرورهای مختلف به خطر میندازه.
سیستم هش امن یه سیستم تدافعی و لایهء درونی هست برای کم کردن خسارت وقتی که سایت هک شد یا بهرصورت دیگری سرقت اطلاعات سرور صورت گرفت. نه موقعی که اصلا هک نشده و کسی نفوذ نکرده.
اون بحث وبشل و اینها هم که گفتم بخاطر این بود که شما گفتید سالت ثابت رو در htaccess ذخیره میکنیم که جاش خیلی امن باشه.
منظور من از اول تاحالا این بود که اگر سایت هک بشه دیگه اینکه سالت ثابت توی htaccess باشه یا توی کد یا خارج از www تفاوت چندانی نداره. چون دسترسی به همهء اینها یک سطح از اختیارات رو میخواد. منظور دسترسی هکری هست که به خود سایت یا کل سرور نفوذ کرده، نه دسترسی استاندارد از طریق وب. مگه همینطوری میشه وبشل روی سایت کسی اجرا کرد؟ سایت باید اول هک بشه یا حفره ای داشته باشه تا بشه وبشل کار گذاشت (که البته اینم خودش هک شدنه دیگه).

ضمنا نباید فکر کرد که همیشه فقط این یک هکر هست که ممکنه یه روزی به دیتابیس و اطلاعات سایت ما دسترسی پیدا کنه، ممکنه یه آدم نااهل یا ادمین بد و کسی که بهرصورت دسترسی موقت هم به سرور پیدا کرده اطلاعات رو سرقت کنه. نمیخوام گندش بکنم، اما بهرحال این مسائل کم احتمالی نیستن و اینطور نیست که هیچوقت اتفاق نیافتاده باشن و نیافتن. سیستم ما تاجاییکه امکان داره هرچی حساب شده تر باشه طبیعتا بهتره. پسورد یکی از محرمانه ترین اطلاعات کاربران هست و چون لزومی نداره اصلش رو روی سایت نگهداری کنیم، از هش اون استفاده میکنیم، ولی هش خالی هم امنیت کمی داره و با توجه به پسوردهای کم و بیش ضعیفی که خیلی از کاربران دارن این مشکل ایجاد میکنه؛ پس ما میایم و هش رو خیلی امن تر میکنیم. یعنی رسیدن از هش به پسورد رو خیلی مشکل تر میکنیم.
بله درسته که هکر راههای دیگر هم برای سرقت پسورد داره، درسته که کسی از سمت سرور هم ممکنه از راههای دیگری استفاده کنه، ولی همونطور که در بحث تاپیک دیگر توضیح دادم اینا دلیل نمیشه ما کاری رو که میتونیم انجام بدیم و جلوی یکسری حمله ها و افراد رو میگیره یا حداقل میزان خسارت رو محدود میکنه انجام ندیم.

eshpilen
چهارشنبه 05 بهمن 1390, 19:08 عصر
خب تا اینجا ما دربارهء انواع حمله ها و نیاز به یک Salt رندوم به ازای هر اکانت صحبت کردیم.

ضمنا در این تاپیک (http://barnamenevis.org/showthread.php?324337-%D8%A8%D8%AD%D8%AB-%D8%AF%D8%B1%D9%85%D9%88%D8%B1%D8%AF-%D8%B3%D8%A7%D9%84%D8%AA-%D8%B1%D9%86%D8%AF%D9%88%D9%85-%D8%A8%D9%87-%D8%A7%D8%B2%D8%A7%DB%8C-%D9%87%D8%B1-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1-%D9%88-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87%D8%A1-%D8%A2%D9%86-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3) هم میتونید توضیحات و مثالهایی رو در این باب که چرا Salt رندوم با اینکه همراه با هش در دیتابیس ذخیره میشه بازهم کمک بزرگی در جهت دشوار کردن عملیات کرک هش هست پیدا کنید.

در اون تاپیک توضیحات کافی دادم و باید روشن باشه که نیازی نیست سالت رندوم جدا از هش پسورد نگهداری بشه. بنابراین سالت رندوم رو به سادگی همراه هش پسورد هر کاربر در دیتابیس درج کنید و خیالتون هم نباشه!

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

خب بجز سالت رندوم به ازای هر پسورد/اکانت، ما یک سالت ثابت هم برای کل اکانتها خواهیم داشت که اون سالت رو در جایی غیر از دیتابیس ذخیره میکنیم، مثلا در کد برنامه، یا بقول آقای MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) در htaccess، یا جایی بالاتر از www. ولی بنظر من مکانش خیلی تفاوت نمیکنه و شاید بهتر باشه خودمون رو اذیت نکنیم و اون رو در کد برنامه نگهداری کنیم. چون هرکس بتونه کد منبع برنامه رو بخونه میتونه htaccess رو هم بخونه و یحتمل بالاتر از www رو هم. هرکس هم که توانایی آپلود یا ویرایش فایل رو پیدا کنه، دیگه به همه جا دسترسی داره و کد یا htaccess یا خارج از www براش تفاوتی نمیکنه.

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

تنها علتی که فکر میکنم شاید قرار دادن سالت ثابت در مثلا htaccess مقداری بهتر از قرار دادن اون در کد برنامه باشه اینه که تاحالا چندبار دیدم بعضی سایتها بعضی وقتها بجای اینکه یک فایل PHP رو اجرا کنن کدهای PHP رو نشون دادن یا دانلود شده!! من نمیدونم این اشکال چرا پیش میاد و بهرحال احتمالش زیاد نیست، ولی گفتم این مورد رو ذکر کرده باشم تا بدونید.

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

تازه ما این سالت ثابت رو که استفاده میکنیم خیلی جاها استفاده نمیشه، ولی چون میخوایم امنیت سیستم رو واقعا خوب کار کنیم از یک سالت ثابت هم استفاده میکنیم تا در سناریوهایی که هکر تونسته دیتابیس رو بخونه اما هنوز نتونسته به فایلهای سایت دسترسی پیدا کنه، جلوی امکان کرک رو بطور کامل بگیریم.
هرچند سالت رندوم و متد key stretching خودشون به تنهایی کلی امنیت رو بالا میبرن، ولی نداشتن سالت ثابت دیگه هیچ امکان کرکی رو برای هکر باقی نمیذاره.

البته من فکر میکنم شاید اسم سالت ثابت زیاد مناسب نباشه. ولی بهرصورت ازش استفاده میکنم تا همه راحت باشن. اسمهای دیگه ای که روش میذارن مثلا Pepper و بعضی ها هم server secret یا server salt و غیره میگن.

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

- سالت رندوم به ازای هر کاربر و ذخیره به همراه هش در دیتابیس
- سالت ثابت و ذخیره در مکانی غیر از دیتابیس
- استفاده از متد key stretching

ولی روی بقیهء این موارد هنوز یک مقدار مقدمات و توضیحات نیاز هست که در پست های بعدی عرض میکنم.

رضا قربانی
پنج شنبه 06 بهمن 1390, 00:27 صبح
البته من میذارم شخصیت واقعی خودتون رو کاملا به دیگران نشون بدید و خودشون دربارش قضاوت کنن.شخصیت ما معلومه عزیز من ، کاربران هم از شخصیتمون با خبرن و هم از شخصیت شما پس نیازی نیست بگی خودشون قضاوت کنن .
تا حالا فکر کردی یک کاربر می ترسه بعد شما پست بزنه !!! ...
شما یه کم از امنیت می دونید (البته تئوری و مقدار مطالعه زیاد در یک روز) هر کس و نا کس رو با حرفاتون از برنامه نویسی کنار می کشید و فقط فکر می کنید کل php مربوط به امنیت می شه !! کی گفته ؟

MMSHFE هم روش خاصی رو نگفته. سالت ثابت رو که ما هم داشتیم و بهش میرسیدیم. اختراع جدیدی و چیز نادانسته ای نیست و در منابع اومده. میشه درهرجایی هم ذخیرش کرد (غیر از دیتابیس) مگه شما اختراع می کنید ؟




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

واسه کم هوشی همه هست که به تاپیک های شما زیاد سر زده نمی شه ؟ پس همه به غیر از شما بی سواد و بدون هوش هستند ؟



جالبه که جناب MMSHFE نمیدونن وبشل چیه
نیازی نیست به همه اعلام کنید ، چیزی گیرتون نمیاد.
مگه شما چیزی جزء امنیت می دونید ؟


نمونه کد گذاشتن هم ساده هست.
اما من اصلا اینقدر خواستهء شما رو منطقی نمیبینم و اهمیتی براش قائل نیستم که این کار رو الان بکنم.عجب
مگه خودتون چند وقت پیش در پاسخ دوستمون نگفتید در این تاپیک میذارم

جناب eshpilen اگه میشه یک نمونه کد برای استفاده از سالت رندوم و نحوه چک کردن صحت رمز واردشده با استفاده از این روش، بگذارید.
باشه به زودی یک تاپیک در این ارتباط میزنمما همه مثل بقیه کاربرا وقت اضافی نداریم شونصد خط نوشته از بحث امنیت به زندگی نامه و ... بخونیم و آخرم هیچ و پوچ . اگه بخواییم اینطوری پیش بریم که پیر می شیم و پس کی پول در بیاریم ؟ کی کار کنیم ؟ اینطور که شما می گید ما باید پرفوسور بشیم و بعد وارد بازار کار و کسب و درآمد کنیم !

گفتی کد می دم ما هم منتظریم ببینم این همه هارت و پورت چی داخلت هست که ازش استفاده کنیم و یک تشکر ازت بزنیم و استفاده کنیم.



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



گفتم به تدریج پیش میریم و به کد نهایی هم میرسیم.
دیگه شما چه حقی داری اومدی هی میگی کد کد!
واسه تو و MMSHFE کد بذارم؟تو کی هستی که بهم می گی حق دارم یا ندارم ؟
اینهمه ایراد گرفتی از کدمون . ما می گیم نره تو می گی ماده اس . هر چی بذاریم ایراد می گیری ما هم منتظریم ببینیم خودتون چی میذارید

5 خط کد داری 500 خط توضیح می دی . شما کدتون رو اینجا بذارید ما خودمون می فهمیم جریان چیه، اگر خوب بود که یک تشکر خشک و خالی نتیجه زحماتته اگر نه که بدون با دل و جان ازش ایراد می گیریم و با سند و مدرک

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



تو کی هستی و از کد گذاشتن واسه امثال تو چی حاصل میشه جز بهانه برای اعمال عقده و کینهء شخصی و حقه بازی که برای تو یک نفر کد بذارم؟کینه شخصی چیه . من که حرفی نزدم هنوز . فقط دو بار گفتم کد بده -- کینه چیه ؟ عقده چیه ؟ ظاهرا شما با همه کینه دارید حتی از خودتون
حقه باز (یکی طلبت) ==> توی این مملکت باید اینطوری پول در بیاریی می فهمی ؟ یا واست توضیح بدم 500 خط ؟ تو هم می تونی انجام بده کی جلوت رو گرفته چرا چشات در اومده ؟


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



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


چرا همه جا وقتی کم میاری در انتها دست به دامن کاربران می شی ؟
همیشه کینه شخصی رو خودت شروع می کنی . با کمال خونسردی اومدم ببینم کد چی گذاشتی دیدم یک سری جملات بی معنی و بدون فکر ، بیش تحویل ندادی آقای با فرهنگ .

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

دیگه توی این تاپیکت پست نمی زنم و شما هم به آموزشت ادامه بده تا سایر کاربران از علمیات شما استفاده کنند :تشویق: (تا زمانی که توهین در این تاپیک رو متوقف کنی)
موفق باشید دوست من

eshpilen
پنج شنبه 06 بهمن 1390, 00:59 صبح
عجب ابلهی هستی واقعا.

رضا قربانی
پنج شنبه 06 بهمن 1390, 01:13 صبح
عجب ابلهی هستی واقعا.
یکبار جولوی روت وایسادم جراتش رو نداشتی به درستی رفتار کنی
یکبار دیگه هم می گم . حرف می زنی جنبه حرف زدن رو داشته باش
کلی اخطار و جریمه و کارت زرد و قرمز توی پروفایلم هست و دوست ندارم با افرادی امثال شما ( خودخواه - خودشیفته - مغرور) برخورد کنم.
ادب خودت رو رسوندی عزیز
همین و تمام

eshpilen
پنج شنبه 06 بهمن 1390, 01:31 صبح
یکبار جولوی روت وایسادم جراتش رو نداشتی به درستی رفتار کنیملتفت نگشتیم داااش :متفکر:

IamOverlord
پنج شنبه 06 بهمن 1390, 01:36 صبح
شما در جواب 2 خط کد می خوام و ...، 500 خط نوشتی. خودت تاپیک خودت رو به هم زدی. با کمال احترام، کسی قصد و غرضی که نداره.

eshpilen
پنج شنبه 06 بهمن 1390, 09:24 صبح
اینا دو خط کد رو چه میفهمن وقتی هیچ دانش و بینشی در این زمینه ندارن.
من اومدم آموزش اصولی و از پایه بدم همراه کلی اطلاعات مفید برای همه.
وگرنه برای من کل کل کردن با دو نفر که اینقدر کم سواد هستن در زمینهء مورد بحث چه اهمیتی داره؟
اصلا درحدی هستن که بشه باهاشون بحث کرد؟
مثل اینکه یه ریاضیدان بخواد با یه آدم با سواد در حد پنجم ابتدایی راجع به مفاهیم پیشرفتهء ریاضی بحث کنه.
بی سواد میگه راست میگی فرمولت رو بذار ببینم!!
انسان باید صبر داشته باشه. اینقدر اگر خودشون بحث نمیکردن تا الان به کد هم رسیده بودیم.
ولی اینا که در تخصص خودشون مطالعه نمیکنن و وقت ندارن و به قول خودشون باید برن دنبال پول و نون زن و بچه و کاری به این کارها نمیتونن داشته باشن، دنبال کد میگردن واسه چی؟ همون جوری سمبل کنن و دوتا روش اشتباه از خودش درکنن فکر کنن هوشمندانه هست دیگه!
بعد هم از مطالب استقبال شده که این از تشکرهایی که زدن مشخصه.
من برای دو نفر آدم بیخود که بخاطر غرور و منافع خودشون جلوی یادگیری و آگاهی دیگران رو میگیرن هیچ اهمیتی قائل نیستم که بخوام بر اساس نظر اونها کاری بکنم.
تاحالاش هم بی سوادیشون مشخص شده. با کد این کار رو نکردم بنظرم! نه؟
کد میذاشتم مثلا چی میشد؟ کسی سواد تحلیلش رو داشت؟ میدونست اصول و متدهای علمی چی هستن و چرا اونطوریه؟


شما در جواب 2 خط کد می خوام و ...، 500 خط نوشتی. عزیزم من واسه یکی دو نفر خاص نیامدم این تاپیک رو استارت کنم.
برام اهمیتی نداره که بخوام اونا منو تایید کنن، چون اصلا در این حد نیستن.
منظور جلب نظر اونها، کل کل در سطح خودشون باهاشون، و اجرای دستور و درخواستشون نبوده و نیست.
من گفتم حالا که بهانه ای پیش آمد بذار یه آموزش اصولی برای همه بذارم در این زمینه و دیگران رو مقداری آگاه کنم. حالا آخرش هم کد هست مسلما و متقاضی ها میتونن منتظرش بمونن. ولی این تاپیک بخاطر اونا یا صرف کد گذاشتن براشون نبوده و نیست. من مطالب خودم رو دارم با هدف و روشی که خودم فکر میکنم درسته.

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

eshpilen
پنج شنبه 06 بهمن 1390, 09:44 صبح
من دربارهء اصولش مطلب میدم تا همه در نهایت خودشون بینش لازم برای ارزیابی رو پیدا کنن.
مگر احمق هستم واسه یک نفر آدم کم سواد و بیخود کد بذارم که چی بشه؟ بیاد به تمسخر بگیره و اراجیف ببافه؟
هیچکدام از اصول و متدهای علمیش رو نمیدونستن اینا. بعد چطوری میخواستن کد منو تحلیل و ارزیابی کنن؟
تازه به فرض اینکه آدمهای درست و صادق و منصفی باشن. وگرنه که فقط وقت آدم رو تلف میکنن و ابهام و انحراف در بحث ایجاد میکنن.
نه آقاجان من برای همه مطلب میذارم.
هرکس خواست بخونه. هرکس خواست نخونه.
برای بار دهم میگم، کد میخوای الان خبری نیست. آخر مطالب و به روش خودم.
پس دیگه مدام نیا بگو کد کد و مطالب و تاپیکی رو که فقط برای تو نیست خراب نکن.
مگر من اومدم با امثال تو مسابقهء کدنویسی بذارم؟
داورش کیه اونوقت؟
خجالت نمیکشن من تا دوتا پست پرمحتوی زدم هنوز یک روز نگذشته اومدن که من و بحث رو خراب کنن.
میگن توضیح بیخودی و مطلب بدردنخور. درحالیکه خودشون مقدمات این مسائل رو هم نمیدونستن.
چطور دیگران خوششون اومده و پای پست های اول تاپیک اونقدر تشکر خورده؟
یخورده شعور داشته باش حقوق دیگران رو رعایت کن.
شما که نمیتونی جای دیگران نظر بدی. میتونی؟
فروم مال همه هست. چرا نمیذاری دیگران استفادشون رو بکنن.
من با امثال شما هیچ کاری ندارم.
برو جای دیگه هرچی میخوای کد کد بکن و بگو eshpilen نتونست کد بنویسه.
برو باباجان دلت خوش باشه.
من واسه پاسخگویی به شخص شما اینجا نیامدم.
اومدم تا برای همگان مطالبی رو که خودم میخوام بذارم و افکار عمومی خودش قضاوت کنه.

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

eshpilen
پنج شنبه 06 بهمن 1390, 11:02 صبح
ما همه مثل بقیه کاربرا وقت اضافی نداریم شونصد خط نوشته از بحث امنیت به زندگی نامه و ... بخونیم

همچین می گی واسه تو و MMSHFE انگار هزاران کاربر از این تاپیک دیدن می کنند و الان دارن این تاپیک رو می خونن . همه اومدن دیدن فقط نوشتی نوشتی نوشتی رفتن و دیگه پشتشون هم نیگاه نکردن و فکز کنم همین من و MMSHFE داریم تاپیکتون رو می خونیم و بهتون لطف می کنیم و جواب می دیم و توی موضوعت شرکت کردیم .
واقعا ذات درست و مردانگی شما رو شاهد بودیم.
بجای دیگران هم که قضاوت میکنید و حکم میدید و عمل میکنید.
چطور پستهای اول تاپیک که حجیم هم بودن اونقدر تشکر خورده پاشون؟
من از پایه شروع کردم و داشتم توضیح میدام تا آخرش به روش اصولی برسیم.
تا وقتی شما دو نفر نیامده بودید در جریان بحث انحراف ایجاد کنید همه چیز داشت خوب پیش میرفت.
من میخواستم همون مطالب رو ادامه بدم و دلیلی نداشت وقتی از ابتداش استقبال شده دیگه استقبالی صورت نگیره. اونم وقتی پستها منظم و منسجم پیش میرفت و در جریانش وقفه و اختلالی ایجاد نمیشد.
اما شما تا دیدید یه چیزایی داره معلوم و مورد توجه واقع میشه و نتیجهء ادامه و آیندهء این بحث مورد انتظار و خوشایند شما نیست اومدید گند زدید به تاپیک.

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

بنظر من بحث فنی در مرحلهء بعد از بحث اخلاقی و شناخت آسیب های اجتماعی هست.
آسیب هایی مثل امثال شما!
وقتی مردم اینطور باشن دیگه علم و فناوری رو چه کسی میتونه معرفی کنه و چه کسانی میخوان با چه انگیزه ای اصولی و کامل یاد بگیرن و چه استفاده ای میخوان ازش بکنن در این اجتماع فاسد که هرکس دنبال خودخواهی های خودشه؟
برای همین به این مسئله اهمیت میدم که پتهء امثال شما رو بریزم روی آب و دیگران شما رو بشناسن.
هرچند متاسفانه فکر میکنم تعداد آدمهایی مثل شما اونقدری زیاد هست که شاید این کار هم فایدهء چندانی نداشته باشه.
بهرحال بهتره اون آدمهایی که شبیه شما هستن خودشون رو در آینهء شما ببینن و بفهمن تاوقتی انسانها از نظر اخلاقی و اصول صحیح رفتار اجتماعی (نه یکسری برچسب و ادعا و حرف و ظواهر ریاکارانه) درست نیستن، همیشه نقص و ضعف و مشکلات وجود خواهند داشت و علم و فناوری به تنهایی برای ما خوشبختی به ارمغان نمیاره.

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

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

yones_safari
پنج شنبه 06 بهمن 1390, 11:21 صبح
درود
eshpilen (http://barnamenevis.org/member.php?148005-eshpilen) جان شما خیلی خوب در مرود امنیت توضیح میدی ولی اینو باور کن که به خدا قسم مغروری.خیلی.اینو یه نفر دو نفر نگفتن تو همه جا که شما پست زدید همه کسانی که پست های شما رو خوندن این غرور رو حس کردن که خوب نیست.ولی من واسه کسب علم میام اینجا پس مهم نیست.امیدوارم دلخور نشده باشی از حرفهام.:قلب:

eshpilen
پنج شنبه 06 بهمن 1390, 11:37 صبح
من فکر نمیکنم مغرور باشم.
اتفاقا بخاطر مغرور نبودن صراحت دارم و چیزی از درونیات خودم را پنهان نمیکنم.
با مخالفان رو در رو نبرد میکنم. مردانه.
اگر توانستید شما پیروز شوید. من هراسی نداریم.
هرکسی باید جایگاه خودش را شناخته و بپذیرد و اگر میخواهد بالاتر برود از راه اصولی و مشروع تلاش کند.

اما دیگران اهل ریاکاری و تزویر هستند.
آخرش به کجا میرسن؟
به اینکه بگن مطالب بدرد نمیخوره، نمیدونم ما باید دنبال نان زن و بچه بدویم و پول دربیاریم، و غیره و غیره.
من نمیدانم اینها را نشانهء چه چیز مثبتی میتوان دانست؟
اینها همه توجیه است.
و سعی در کوچک و بی فایده نشان دادن مطالب دیگران.
سعی در توجیه تنبلی و ناتوانی خود.

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

پست قبلی را هم بخونید و جریان تاپیک را از صفحهء اول بررسی کنید تا ببینید آیا این افراد غیر از این رفتار و نیت ناشایست کار دیگری کرده اند؟

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

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

eshpilen
پنج شنبه 06 بهمن 1390, 11:49 صبح
درود
eshpilen (http://barnamenevis.org/member.php?148005-eshpilen) جان شما خیلی خوب در مرود امنیت توضیح میدی
خب پس خودتون به این افراد اعلام کردید که مطالب بنده چرت و پرت و کم ارزش نبوده اند.
ببینیم بازم این افراد میان از جانب دیگران اظهار نظر کنن.


ولی من واسه کسب علم میام اینجا پس مهم نیست.امیدوارم دلخور نشده باشی از حرفهام.:قلب: اگر اینطور باشه و بنظرت اینطوره، این رو دیگران هم باید بفهمن.
من غرور دارم یا ندارم، دارم چکیدهء مطالبی رو که برای خود سالها زمان و تلاش برده تا مطالعه کردم و فهمیدم به رایگان در اختیار شما میذارم. تازه کلی هم سوالات و ابهامات رو جواب میدم و مطالب رو به هر زبان ساده و توضیحات اضافه ای که شده براتون روشن میکنم. نه پولی ازتون میگیرم نه با این اعتبار و تبلیغات شاگرد میگیرم و درآمد کسب میکنم نه هویت حقیقی شما رو میدونم و نه شما هویت حقیقی منو میدونید که منت و انتظاری بر شما داشته باشم که بعدا بخوام ازش استفاده ای بکنم.

حداقل مثل بعضی ها تنگ نظر و بخیل و حسود نیستم!

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

بدترین آدمها اونایی هستن که حسود و بخیلند و سعی میکنن تا جلوی پیشرفت و برتری دیگران رو بگیرن.
آیا من این کار رو کردم؟
به خدا اگر از من جلو بزنید و نسبت به من فخر بفروشید و غرور داشته باشید، پشیمان نمیشوم که چرا چیزی به شما یاد دادم و راه درست را به شما معرفی کردم.
چون غرور شما به خودی خودش به من صدمه ای نمیزند. نه جلوی پیشرفت مرا میگیرد، نه پولی از جیب من بابتش خارج میشود؛ خلاصه چیزی است که اگر من خودم با خودم مشکل نداشته باشم به من هیچ صدمه ای نمیزند.

yones_safari
پنج شنبه 06 بهمن 1390, 16:52 عصر
داداش عده ای دوست دارن 3 خط کد رو بگیرند و بچپونن تو پرروژشون تا به قول خودشون امنیت تکمیل بشه.کسی که حوصله خواندن مطلب رو نداره و به طولانی بودن مطلب اعتراض میکنه!!!داداشم قرار نیست که یه روزه بخونی تقسیم کن و هر وقت وقتشو داشتی بخون.در ضمن از دوستان دیگر هم خواهش میکنم پارازیت ندازن،و بذارن مطلب ادامه پیدا کنه!!اگه از مطالب خوشتون نمیاد ملاک بر بد بودنش نیست.در ضمن من فقط به خاطر مطالب پرچم زدم.

eshpilen
پنج شنبه 06 بهمن 1390, 20:56 عصر
خب حالا که ما میخوایم سالت رندوم تولید کنیم، آیا استفاده از توابعی مثل mt_rand مناسبه؟
حقیقتش این تابع تاجاییکه میدونم و تحقیق کردم، برای کاربردهای رمزنگاری اصلا توصیه نمیشه.
در رمزنگاری از توابعی استفاده میشه که جهت استفاده در این زمینه تایید/طراحی شدن و خصوصیات لازم رو دارن.

تاجاییکه میدونم، تابع mt_rand از زمان و شمارهء پروسهء جاری (PID) برای به اصطلاح initialize کردن الگوریتمش استفاده میکنه.
شاید این مطلبی باشه که بعضی ها ندونن و به همین خاطر میان و خودشون چیزهایی مثل زمان رو به رشتهء رندوم اضافه میکنن. البته این کار ضرری هم نداره و ممکنه در بعضی موارد امنیت رو مقداری بیشتر کنه، ولی یحتمل نه وقتی که کاملا جایگزین mt_rand بشه.
بهرحال کلا دنیای علم رمزنگاری خیلی گسترده و پیچیده هست و همین توابع به ظاهر ساده دریایی از داستان و ریاضیات و تحلیل دارن برای خودشون و انواع زیادی هم دارن هرکدام با خواص و مزایا و معایب و کاربردهای مختلف.
در مباحث امنیتی و رمزنگاری تقریبا همیشه بهتره ما بجای اینکه چیزی رو خودمون طراحی کنیم، دنبال راه حلهای استاندارد بریم. بهتره یه تابع رندوم امن تر پیدا کنیم و سعی کنیم بهش تکیه کنیم. اونوقت دیگه نیازی نیست خودمون با روشهای اختراعی خودمون رشتهء رندوم تولید کنیم، بلکه میتونیم بسادگی از این توابع استفاده کنیم، چون این توابع خودشون تمام کارهای لازم رو در داخل الگوریتم خودشون انجام میدن و از منابع مختلف در دسترس برای تولید اعداد رندوم هرچه بیشتر امن استفاده میکنن. این الگوریتم ها واقعا پیچیده و حساب شده هستن و سالها تجربه و تحقیق متخصصان متعدد پشت اونهاست و در عمل هم بقدر کافی تست شدن که بشه بهشون اعتماد کرد. هرچند هیچوقت در امنیت نمیشه چیزی رو 100% تضمین کرد، اما اتکا به روشهای استاندارد، بخصوص در حیطهء رمزنگاری و امنیت، عاقلانه ترین راهه، چون احتمال اشتباه در این زمینه، خصوصا برای افراد فاقد دانش تخصصی، بسیار بالاست.

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

من یک تابع تولید اعداد رندوم رو از کتابخانهء رمزنگاری phpseclib کش میرم که بنظرم بقدر کافی ما رو ارضاء میکنه:


function crypt_random($min = 0, $max = 0x7FFFFFFF)
{
if ($min == $max) {
return $min;
}

if (function_exists('openssl_random_pseudo_bytes')) {
// openssl_random_pseudo_bytes() is slow on windows per the following:
// http://stackoverflow.com/questions/1940168/openssl-random-pseudo-bytes-is-slow-php
if ((PHP_OS & "\xDF\xDF\xDF") !== 'WIN') { // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
extract(unpack('Nrandom', openssl_random_pseudo_bytes(4)));

return abs($random) % ($max - $min) + $min;
}
}

// see http://en.wikipedia.org/wiki//dev/random
static $urandom = true;
if ($urandom === true) {
// Warning's will be output unles the error suppression operator is used. Errors such as
// "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
$urandom = @fopen('/dev/urandom', 'rb');
}
if (!is_bool($urandom)) {
extract(unpack('Nrandom', fread($urandom, 4)));

// say $min = 0 and $max = 3. if we didn't do abs() then we could have stuff like this:
// -4 % 3 + 0 = -1, even though -1 < $min
return abs($random) % ($max - $min) + $min;
}

/* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called.
Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here:

http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/

The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro:

http://svn.php.net/viewvc/php/php-src/tags/php_5_3_2/ext/standard/php_rand.h?view=markup */
if (version_compare(PHP_VERSION, '5.2.5', '<=')) {
static $seeded;
if (!isset($seeded)) {
$seeded = true;
mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF));
}
}

static $crypto;

// The CSPRNG's Yarrow and Fortuna periodically reseed. This function can be reseeded by hitting F5
// in the browser and reloading the page.

if (!isset($crypto)) {
$key = $iv = '';
for ($i = 0; $i < 8; $i++) {
$key.= pack('n', mt_rand(0, 0xFFFF));
$iv .= pack('n', mt_rand(0, 0xFFFF));
}
switch (true) {
case class_exists('Crypt_AES'):
$crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
break;
case class_exists('Crypt_TripleDES'):
$crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
break;
case class_exists('Crypt_DES'):
$crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
break;
case class_exists('Crypt_RC4'):
$crypto = new Crypt_RC4();
break;
default:
extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF)))));
return abs($random) % ($max - $min) + $min;
}
$crypto->setKey($key);
$crypto->setIV($iv);
$crypto->enableContinuousBuffer();
}

extract(unpack('Nrandom', $crypto->encrypt("\0\0\0\0")));
return abs($random) % ($max - $min) + $min;
}

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

اگر تابع openssl_random_pseudo_bytes در دسترس باشه میاد و از مولد اعداد رندوم کتابخانهء OpenSSL استفاده میکنه، چون مولد اعداد تصادفی OpenSSL امنیت بالایی داره و برای استفاده در رمزنگاری طراحی شده. هرچند یحتمل سرعتش بالا نیست.
البته سیستم عامل رو چک میکنه و اگر ویندوز بود از OpenSSL استفاده نمیکنه، چون سرعت تابع openssl_random_pseudo_bytes روی ویندوز اونقدری کمه که در عمل مشکل ایجاد میکنه.

در مرحلهء بعد اگر تابع openssl_random_pseudo_bytes در دسترس نبود (یا سیستم عامل ویندوز بود) میاد و استفاده از /dev/urandom رو امتحان میکنه.

حالا این /dev/urandom چیه؟

این یک منبع مخصوص تولید اعداد رندوم در سیستم عاملهایی مثل GNU/Linux هست که بصورت یک فایل خاص نگاشت شده و هر برنامه ای که نیاز به اعداد رندوم امن برای عملیات رمزنگاری داره میتونه از این فایل هر مقدار دیتای رندوم رو که نیاز داره بخونه.
این دیتای رندوم با استفاده از یک الگوریتم تولید اعداد تصادفی تولید میشه اما منشاء اولیهء این دیتای رندوم از نویز محیطی که از درایور سخت افزارها جمع آوری میشه و یکسری منابع دیگه هست. منابع دیگه بطور مثال میتونن میزان استفاده از CPU، IO و شبکه در زمانهای خاصی باشن که سیستم به جمع آوری دیتای رندوم میپردازه. چون این مقادیر معمولا بصورت رندوم تغییر میکنن و کسی نمیتونه براحتی و دقت زیاد اونها رو پیشبینی کنه.

البته منبع اصلی دیتای تصادفی درواقع /dev/random (http://barnamenevis.org/en.wikipedia.org/wiki//dev/random) هست که بر اساس تخمین مقدار نویز و وضعیت رندوم جمع آوری شده دیتای رندوم برمیگردونه. اگر دیتای رندوم تقاضا شده توسط برنامه ها از میزان محاسبه شدهء تقریبی آنتروپی جمع آوری شده بیشتر باشه، این فایل خاص دیگه دیتای رندوم برنمیگردونه و برنامه ای که داره ازش میخونه (یعنی تقاضای دیتای رندوم داره) اونقدر منتظر میمونه (به اصطلاح Block میشه) تا مقداری نویز و وضعیت رندوم جدید جمع آوری بشه. بخاطر همین از /dev/random برای تولید کلیدهای رمزنگاری با امنیت بسیار بالا یا کلیدهایی که برای حفاظت طولانی مدت دیتا درنظر گرفته شدن استفاده میشه.

اما /dev/urandom بعکس هیچوقت بلاک نمیشه (برنامه منتظر نمیمونه) و حتی اگر هیچ آنتروپی جدیدی در اختیار سیستم نباشه با استفاده از همون آنتروپی قبلی اعداد رندوم تولید میکنه. بنابراین امنیت urandom از random کمتره، ولی این به این معنا نیست که برای کاربرد ما امنیت نداره. از random در کاربردهای خیلی مهم یا برای کلیدهای رمزنگاری که قراره سالها از اطلاعات مهمی حفاظت کنن استفاده میشه، و برای کاربردهای معمولی میشه از urandom استفاده کرد.
حرف u اول urandom هم از حرف ابتدای unlocked گرفته شده که به معنای عدم بلاک شده هست (گفتیم که این منبع هیچوقت برنامه رو بلاک/منتظر نمیکنه).

در مرحلهء آخر اگر برنامه نتونه از urandom هم استفاده کنه (مثلا سیستم عامل مورد نظر این منبع رو نداشته باشه)، خودش با استفاده از ترکیب mt_rand با کلی مراحل و الگوریتم پیچیده اقدام به تولید اعداد رندوم میکنه. یعنی سعی میکنه ضعفهای mt_rand رو که برای عملیات رمزنگاری طراحی نشده به این شکل تاحدی که میتونه برطرف کنه. حالا تمام این الگوریتم ها خیلی حساب شده هستن و برای خودشون داستان درازی دارن که چطور عمل میکنن و بر اساس چه روابط ریاضی ای طراحی شدن. خودتون میتونید کدش رو نگاهی بندازید.

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

البته بنظرم ما میتونیم اون بخشی از کد تابع رندوم phpseclib رو که از mt_rand استفاده میکنه کش بریم!
به این شکل آنتروپی ارزشمند سیستم رو هدر نمیدیم و در عین حال امنیت mt_rand رو هم بالاتر میبریم که یحتمل از استفادهء ساده از mt_rand خیلی بهتر خواهد بود.

راستی یک کامنتی که نویسندهء این تابع دربارهء اون زده رو هم برای کامل بودن مطلب درج میکنم:


Depending on how this is being used, it may be worth while to write a replacement. For example,
* a PHP-based web app that stores its data in an SQL database can collect more entropy than this function


ترجمه: « بسته به اینکه این چطور استفاده میشود، ممکن است نوشتن یک جایگزین ارزشش را داشته باشد. برای مثال یک وب اپلیکیشن بر اساس PHP که دیتای خودش را در یک دیتابیس SQL ذخیره میکند میتواند آنتروپی بیشتری از این تابع را جمع آوری کند. »

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

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

MMSHFE
جمعه 07 بهمن 1390, 11:35 صبح
جناب قربانی، خودتو ناراحت نکن. ایشون بیشتر ناراحتیشون از بنده هست که با دلیل دارم ثابت میکنم وقتی هکر به سورس کد دسترسی داره، نیازی به بازکردن رمز نداره. حالا ازنظر ایشون این مسئله نشانه بیسوادی من هست، عیبی نداره. ازنظر من هم نظریات ایشون فاقد ارزش و اعتباره (نظرات شخصی ایشون و نه مطالب علمی که میگذارن و البته بیشتر نقل قول از سایتهای دیگه هست). راستی، این مطالب رو که نقل قول کردین، توی پیام خصوصی بهتون گفتن؟ آخه خیلی جالبه و جایی ندیدم. راستی جناب eshpilen، من نمیدونم وبشل چیه؟ خوبه که اگه اون بحث رو مطرح نکرده بودم، طوری وبشل رو به بقیه معرفی میکردین که انگار میشه باهاش سورس گوگل رو هم درآورد! ضمناً درسته که سالت ثابت رو از خودم در نیاوردم و چیز جدیدی نیست ولی سالت رندوم هم چیز جدیدی نیست که شما خودتون اختراع کرده باشین. چند تا سایت در این زمینه معرفی کنم تا راضی بشین؟ سایتهایی که مقالاتی درمورد سالت رندوم و ذخیره اون توی دیتابیس و... دارن که تاریخ درج مقاله قبل از تولد شماست؟ عزیز من اگه میگم کد بگذار معناش این نیست که نیازمند کدتون هستم. واسه همونهایی که مطالب آموزشی شما رو میخونن گفتم که بدونن این مطالب تئوری رو چطور در عمل پیاده کنن. البته این مشکل فقط مربوط به شما نیست. ما ایرانیها کلاً در این زمینه هنرمندیم که حرف خوب میزنیم و در عمل هیچی نداریم که رو کنیم. مثالش، کنفرانسهای امنیتی و... هست که در کشور سالانه برگزار میشه. در عوض تعداد سایتهای امنی که در کشور وجود داره رو بررسی کنید و تعدادشون رو با تعداد این کنفرانسها مقایسه کنید تا به حقیقت حرفی که میزنم واقف بشین. قضاوت درباره اینکه وجود چه کسانی باعث شرمساری این فروم هست رو هم بعهده کاربران و مدیران سایت میگذارم. کلاً حساب کنید چندتا آیدی مسدود داشتین و بنده چندتا؟ چندتا از تاپیکهای شما بدون جنجال پیش رفته و چند مورد شکایت از بنده بوده؟ حداقل همه دوستان در این انجمن میتونن منصفانه تأیید کنند که بنده از لحظه حضورم توی این انجمن قصدم این بوده که مفید باشم. توی امضای خودم هم گفتم مفید بودن یعنی چی! تعداد پستهای بنده رو با تعداد تشکرهایی که ازم شده مقایسه کنید، اونوقت بگین کی بیشتر مایه شرمساری هست. به این آمار، تعداد شکایتها و اخطارها رو هم اضافه کنید که خوشبختانه برای بنده صفر هست و برای شما دقیقاً نمیدونم چنده ولی قطعاً یک عدد مثبت! هست. اینکه گفتین خواسته بنده رو مبنی بر ارائه سورس کد نمونه، منطقی و با اهمیت نمیدونید که بخواین براش ارزش قائل بشین هم ناشی از اینه که شما کلاً خواسته های دیگران رو غیرمنطقی میبینید چون همه جا توی هر صحبتی که مطرح کردین اذعان داشتید که فقط خودتون مهم هستین و نظر دیگران براتون مهم نیست. بهتره یادتون نره که قراره توی جامعه زندگی کنید. پس مهمه که چه فیدبکی از خودتون ارائه میدین. وگرنه بهتره بگردین و یک غار با پوشش WiMAX پیدا کنید و بفرمایید اونجا زندگی کنید و سر فرصت همه رفرنسها رو مطالعه کنید چون نه درآمد براتون مهمه و نه سایر افراد جامعه. حداقل اینطوری کمتر تنش ایجاد خواهید کرد.
از همه دوستان عذر میخوام که کمی تند صحبت کردم. من کلاً آدمی نیستم که به کسی بی احترامی کنم مگه اینکه اون فرد در عمل نشون بده که جایی واسه احترام گذاشتن نداره. از مدیر انجمن جناب کرامتی هم عذرخواهی میکنم و سعی میکنم دیگه اینطور پستها ایجاد نکنم. قطعاً اگه حرفهایی که گفته شده، توی پیام خصوصی به بنده اعلام میشد، همونجا جواب میدادم و علنی نمیگفتم ولی الآن یکم اوضاع فرق کرده بود.
باز هم عذر میخوام. از این به بعد نذر میکنم کلاً با جناب eshpilen همکلام نشم چون برای کلام خودم حداقل ارزش قائلم.
موفق باشید.

eshpilen
جمعه 07 بهمن 1390, 21:08 عصر
دلیل دارم ثابت میکنم وقتی هکر به سورس کد دسترسی داره، نیازی به بازکردن رمز نداره.
سودی در کرک کردن هش پسوردها برای هکر هست که میتواند خیلی هم زیاد باشد.
تاپیکی که به توضیح و اثبات این مطلب میپردازد: http://barnamenevis.org/showthread.php?325189
برای هکر مسلما شانس و مزیت بزرگی است که بتواند اصل پسورد کاربران را بدست بیاورد، چون میتواند برای نفوذ به اکانتهای دیگر کاربران، منجمله اکانت ایمیل آنها، بسیار مفید باشد. یک بار هک و کرک میکند و بعد میتواند از نتایج آن چند برابر استفاده ببرد و به اکانت حداقل بعضی از کاربران در سایتهایی هم که نمیتوانست هیچ رخنه ای در امنیت آنها بیابد نفوذ کند.


ضمناً درسته که سالت ثابت رو از خودم در نیاوردم و چیز جدیدی نیست ولی سالت رندوم هم چیز جدیدی نیست که شما خودتون اختراع کرده باشین. چند تا سایت در این زمینه معرفی کنم تا راضی بشین؟ سایتهایی که مقالاتی درمورد سالت رندوم و ذخیره اون توی دیتابیس و... دارن که تاریخ درج مقاله قبل از تولد شماست؟ من در پاسخ کاربر «رضا قربانی (http://barnamenevis.org/member.php?151175-%D8%B1%D8%B6%D8%A7-%D9%82%D8%B1%D8%A8%D8%A7%D9%86%DB%8C)» این صحبت را کردم چون گفتن که روش آقای MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) بهتره.
منظور من این بود که از متد سالت ثابت اطلاع قبلی داشتم و قراره بخشی از سیستم ما هم باشه. درواقع سیستم ما کاملتر و امن تره و چیزی کم نداره.


عزیز من اگه میگم کد بگذار معناش این نیست که نیازمند کدتون هستم. واسه همونهایی که مطالب آموزشی شما رو میخونن گفتم که بدونن این مطالب تئوری رو چطور در عمل پیاده کنن. البته این مشکل فقط مربوط به شما نیست. ما ایرانیها کلاً در این زمینه هنرمندیم که حرف خوب میزنیم و در عمل هیچی نداریم که رو کنیم. من تا اینجا حداقل دانش و بینش امنیتی اصولی تر نسبت به بقیه داشته ام.
عملی کردنش هم کار دشواری نیست. به موقع به آن میرسیم.
ولی بقیه دانش و بینشی ندارند و صرفا روش و کد سرهم میکنند که 99% دچار نقص و ضعف های جدی هستند.
پس فکر میکنم مطالب بنده برای عموم مفید باشند. چون اول باید دانش و بینش تئوریک را پیدا کرد و بعد به کار عملی و کدزنی پرداخت.

مثالش، کنفرانسهای امنیتی و... هست که در کشور سالانه برگزار میشه. در عوض تعداد سایتهای امنی که در کشور وجود داره رو بررسی کنید و تعدادشون رو با تعداد این کنفرانسها مقایسه کنید تا به حقیقت حرفی که میزنم واقف بشین.بنظر بنده مشکل اتفاقا به ضعف شدید علمی/تئوریک برنامه نویسان برمیگردد.
در همین موضوعات جاری بنده چقدر مطالب ارائه کردم و چقدر توضیح دادم، هنوز خیلی ها متوجه نمیشوند و خود شما هم که اصلا به کل فرضیات و اهمیت و فواید مطالب و راهکارهای ارائه شده را زیر سوال میبرید. درحالیکه اینها تازه پیچیده ترین و مبهم ترین مسائل در زمینهء امنیت نیستند و منبع و توضیحات کافی دربارهء آنها کم نیست و متخصصان و افراد آگاه روی آنها توافق نظر خوبی دارند. همه مسائل و راهکارهایی کاملا شناخته شده و استاندارد هستند.
البته اینکه میگویم شناخته شده، منظورم در نزد متخصصان امنیت و برنامه نویسان واقعی و برجسته است. وگرنه در سطح عمومی در این زمینه دانش و مهارت لازم بسیار کمتر است.

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

Net So
جمعه 07 بهمن 1390, 22:12 عصر
جناب قربانی، خودتو ناراحت نکن. ایشون بیشتر ناراحتیشون از بنده هست که با دلیل دارم ثابت میکنم وقتی هکر به سورس کد دسترسی داره، نیازی به بازکردن رمز نداره. حالا ازنظر ایشون این مسئله نشانه بیسوادی من هست، عیبی نداره. ازنظر من هم نظریات ایشون فاقد ارزش و اعتباره (نظرات شخصی ایشون و نه مطالب علمی که میگذارن و البته بیشتر نقل قول از سایتهای دیگه هست). راستی، این مطالب رو که نقل قول کردین، توی پیام خصوصی بهتون گفتن؟ آخه خیلی جالبه و جایی ندیدم. راستی جناب eshpilen، من نمیدونم وبشل چیه؟ خوبه که اگه اون بحث رو مطرح نکرده بودم، طوری وبشل رو به بقیه معرفی میکردین که انگار میشه باهاش سورس گوگل رو هم درآورد! ضمناً درسته که سالت ثابت رو از خودم در نیاوردم و چیز جدیدی نیست ولی سالت رندوم هم چیز جدیدی نیست که شما خودتون اختراع کرده باشین. چند تا سایت در این زمینه معرفی کنم تا راضی بشین؟ سایتهایی که مقالاتی درمورد سالت رندوم و ذخیره اون توی دیتابیس و... دارن که تاریخ درج مقاله قبل از تولد شماست؟ عزیز من اگه میگم کد بگذار معناش این نیست که نیازمند کدتون هستم. واسه همونهایی که مطالب آموزشی شما رو میخونن گفتم که بدونن این مطالب تئوری رو چطور در عمل پیاده کنن. البته این مشکل فقط مربوط به شما نیست. ما ایرانیها کلاً در این زمینه هنرمندیم که حرف خوب میزنیم و در عمل هیچی نداریم که رو کنیم. مثالش، کنفرانسهای امنیتی و... هست که در کشور سالانه برگزار میشه. در عوض تعداد سایتهای امنی که در کشور وجود داره رو بررسی کنید و تعدادشون رو با تعداد این کنفرانسها مقایسه کنید تا به حقیقت حرفی که میزنم واقف بشین. قضاوت درباره اینکه وجود چه کسانی باعث شرمساری این فروم هست رو هم بعهده کاربران و مدیران سایت میگذارم. کلاً حساب کنید چندتا آیدی مسدود داشتین و بنده چندتا؟ چندتا از تاپیکهای شما بدون جنجال پیش رفته و چند مورد شکایت از بنده بوده؟ حداقل همه دوستان در این انجمن میتونن منصفانه تأیید کنند که بنده از لحظه حضورم توی این انجمن قصدم این بوده که مفید باشم. توی امضای خودم هم گفتم مفید بودن یعنی چی! تعداد پستهای بنده رو با تعداد تشکرهایی که ازم شده مقایسه کنید، اونوقت بگین کی بیشتر مایه شرمساری هست. به این آمار، تعداد شکایتها و اخطارها رو هم اضافه کنید که خوشبختانه برای بنده صفر هست و برای شما دقیقاً نمیدونم چنده ولی قطعاً یک عدد مثبت! هست. اینکه گفتین خواسته بنده رو مبنی بر ارائه سورس کد نمونه، منطقی و با اهمیت نمیدونید که بخواین براش ارزش قائل بشین هم ناشی از اینه که شما کلاً خواسته های دیگران رو غیرمنطقی میبینید چون همه جا توی هر صحبتی که مطرح کردین اذعان داشتید که فقط خودتون مهم هستین و نظر دیگران براتون مهم نیست. بهتره یادتون نره که قراره توی جامعه زندگی کنید. پس مهمه که چه فیدبکی از خودتون ارائه میدین. وگرنه بهتره بگردین و یک غار با پوشش WiMAX پیدا کنید و بفرمایید اونجا زندگی کنید و سر فرصت همه رفرنسها رو مطالعه کنید چون نه درآمد براتون مهمه و نه سایر افراد جامعه. حداقل اینطوری کمتر تنش ایجاد خواهید کرد.
از همه دوستان عذر میخوام که کمی تند صحبت کردم. من کلاً آدمی نیستم که به کسی بی احترامی کنم مگه اینکه اون فرد در عمل نشون بده که جایی واسه احترام گذاشتن نداره. از مدیر انجمن جناب کرامتی هم عذرخواهی میکنم و سعی میکنم دیگه اینطور پستها ایجاد نکنم. قطعاً اگه حرفهایی که گفته شده، توی پیام خصوصی به بنده اعلام میشد، همونجا جواب میدادم و علنی نمیگفتم ولی الآن یکم اوضاع فرق کرده بود.
باز هم عذر میخوام. از این به بعد نذر میکنم کلاً با جناب eshpilen همکلام نشم چون برای کلام خودم حداقل ارزش قائلم.
موفق باشید.
Seconded و به عبارتی تایید میشه.

---
برای اینکه یوزر eshpilen هم پیشاپیش تهمت بی سواد بودن به من نزنه lol این یکی فکر کنم کفایت میکنه:لبخند: ( من Administrator فروم بازیرایانه هستم و این عکس رو چون تو یه ترد اونجا قرار دادم ، این کامنت رو روش گذاشتم. ( پ.ن : الان اگه نگه کل عکس فتوشاپه :D ) )

شما ادعا میکنید که تا الان بیشتر از بقیه از دانش و بینش امنیتی برخوردار بودید. خب ادعای بزرگیه ، معادلش اینه که من میفهمم و بقیه نمی فهمن. من شما رو میشناسم از اون بلاگ ی که یه مدت آدرس ش به عنوان امضا تو iranphp.org بود ...
شما با این بینش بزرگ و ژرف ، نمیدونید که وقتی یک مهاجم Access به دایرکتوری های سرور داشته باشه ، به فایل ها دسترسی داره ؟ و وقتی به فایل ها دسترسی داشته باشه به DB دسترسی داره ؟ پیشاپیش بگم که اگه اطلاعات DB هم حتی تو پوشه ای بالاتر از Root اجرای اسکریپت باشه ، پس خود php قادر به خوندنش هست So یه Script یا Shell هم میتونه اون رو بخونه . پس چه نیازی هست که من خودم رو تیکه تیکه کنم کنم ؟ !
جریان همون غضنفر ی هست که میخواست 3 تا وانت بخره ، بفروشه ماکسیما بخره lol
داری میگی من دسترسی به دایرکتوری دارم ، برم یوزر و پس ادمین رو Crack کنم ، بعد با یوزر و پس ادمین برم Login کنم ، بعد دسترسی بگیرم ، بعد یه چیزی رو دست بزنم که نفوذ کرده باشم. خوب مومن ، هر کسی که دسترسی به دایرکتوری داشته باشه ، عین دسترسی به DB هست دیگه. اصلا کسی که به db دسترسی داره ، مگه مریضه دسترسی رو ول کنه ، بره دسترسی ادمین بگیره ؟ میخوای یگی دسترسیش بمونه ؟ خوب Backdoor میذاره . Sniff میکنه . 10 تا راه داره ... اصلا فرم ورود به پنل ادمینش رو Log میکنه . و ...

یه حرف اشتباه دی مدام داری رو حرفت تاکید میکنی. تهمت هم میزنی به بقیه که بی سوادن و ... شما ویکیپدیا خوندی ، منبعی که هیچ سازمان معتبری ازش استفاده نمیکنه . چون هر کسی میتونه اون رو Edit کنه . والا من حالا خودم رو مثال نمیزنم ولی میشناسم کسانی رو تو این انجمن که 3 جلد کتاب Wrox رو میره قورت میده ! ولی اندازه شما ادعا نداره ... و بقیه رو هم نفهم و نادان و ... نمیدونه ... من بیوگرافی شما رو از همون وبلاگت خوندم. با توجه به شرایط ت حق میدم کمی اینطوری رفتار کنی ولی خوب تا یه حدی . چون از اون به بعد آنرمال میشه ...
شما میگی هکر ها دانش و بینش ندارن ... خوب الان شما دارید ؟
Fact اینه که شما ندارید .
Trolling شما اثبات مجدد این هست ...
Herp Derp و ... که بماند .


ولی بقیه دانش و بینشی ندارند و صرفا روش و کد سرهم میکنند که 99% دچار نقص و ضعف های جدی هستند.
یه پیشنهاد . از اونجا که محور و مرکز ثقل زمین هستید شما ، شما به MS و Sun و ... مشاوره بدید بلکه به راه راست هدایت شدن ... :لبخند:
اینم اون عکسی که وعدش رو داده بودم ...
اگر Url رو بخونید ، کاملا مشخص هست که اینجا کجاست و ...
البته کمی قدیمی هست ولی خوب کفایت میکنه ....

http://www.img4up.com/up2/50931215661121408928.jpg

Net So
جمعه 07 بهمن 1390, 22:14 عصر
@ MMSHFE (http://barnamenevis.org/member.php?55504-MMSHFE) و
رضا قربانی (http://barnamenevis.org/member.php?151175-%D8%B1%D8%B6%D8%A7-%D9%82%D8%B1%D8%A8%D8%A7%D9%86%DB%8C)

خودتون رو خسته نکنید دوستان. به قولی ، آنکس که نداند و نداند که نداند ، در جهل مرکب ابدالدهر بماند ...
کلا این Gif کارساز تره :D

http://www.img4up.com/up2/91855016475366447933.jpg

eshpilen
شنبه 08 بهمن 1390, 00:00 صبح
یک کسی که قبلا از من کینه داشته حالا دوباره ریخته خودش رو خالی کنه.
تو بحث رو نمیتونی بخونی و بفهمی.
بحث رسیدن از هش به پسورد بوده و نه چیز دیگه.
اینکه چرا این مسئله جدای از دسترسی مهمه رو در این تاپیک توضیح دادم: http://barnamenevis.org/showthread.php?325189

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

eshpilen
شنبه 08 بهمن 1390, 00:03 صبح
شما ویکیپدیا خوندی ، منبعی که هیچ سازمان معتبری ازش استفاده نمیکنه . چون هر کسی میتونه اون رو Edit کنه . lol
پس اینهمه عظمت و بازدید و لینک و غیره همه بیهوده و اشتباه هست در سراسر اینترنت.
و چون هرکس میتونه ادیت کنه ارزشی نداره.
و شما منابع خیلی بهتر و معتبرتری دارید مثل نظر خودتون و کد این و اون و وبلاگها و سایتهای دیگه و دوتا هکر و تیم هکری.
خوبه بدونی طبق تحقیقاتی که قبلا انجام شده، کیفیت و صحت مقاله های ویکیپدیا درکل در سطح بسیار خوبی بوده. با دائرت المعارف های معتبر مقایسش کرده بودن.
تازه ویکیپدیا فقط یکی از منابعی هست که من مطالعه میکنم.
اون چیزی هم که هرجایی نوشته اگر کامل و دقیق بخونی و واقعا بفهمی، خودت تاحد زیادی میتونی دربارهء صحتش اطمینان حاصل کنی. علم چیزی صرفا حفظ کردنی از یکسری منابع محدود نیست.
ویکیپدیا یک ابزار یادگیری و پیدا کردن دید کلی و سرنخ اولیه هست اگر بخوای هر موضوعی رو بیشتر ادامه بدی و مطمئن تر بشی.
مثل اینکه آدم از دیگران چیزی بپرسه و راهنمایی بگیره.
تازه ویکیپدیا که کیفیتش بسیار بهتره.
پس اینهمه آدم در این فرومها و سایتهای مختلف سوال میپرسن و از کمک و راهنمایی و نظر و فکر و کدهای دیگران استفاده میکنن اصولا در اشتباه هستن و صرفا باید از یکسری منابع محدود استفاده کنن!
یک دانشمند و محقق واقعی از هر منبعی که ممکنه و ازش ثمرهء عملی میبینه استفاده میکنه.
هر منبعی کاربرد خودش رو داره. گاهی باید ده ها منبع رو مطالعه کنی و از همهء اونها به یک درک و جامعیت و اطمینان کافی برسی.

رضا قربانی
شنبه 08 بهمن 1390, 00:22 صبح
این پاسخی بود که خودت به خودت دادی :


یه عده آدم بی سواد و بی فرهنگ وقتی خودشون رو زیاد گنده کنن و عنوان درست کنن واسه خودشون بعد یکی بیاد که ببینن داره ضایعشون میکنه، نتیجش فوران ابتذال از جانب این افراد هست. چیزی که در این چند روز و بحثها شاهدش بودیم و فکر کنم حداقل بعضی ها باید کاملا متوجه این واقعیت شده باشن.
توی پست 24 - 28-29-30 و بقیه اش ادب و فرهنگی که بالا و توی پست های قبل ادعا می کردی به همه نشون دادی.
چند ساعت نبودم 500 خط فقط توهین کردی اونم چی فقط یک خط رو می گیری نقل قول می کنی و بقیه که درست می گیم رو جواب نمی دی.
نقل قولشون نمی کنم چون دیگه یه کم هم ، حوصله تو یکی رو ندارم و هر چی بگم بی فایده هست. امیدوارم سر عقل بیایید
یاعلی
موفق باشید

eshpilen
شنبه 08 بهمن 1390, 00:25 صبح
عزیزم خب که چی.
واسه من این حرفا زیاد مهم نیست.
همون که امثال شما را رسوا کنم برام کافیه.
این همه تلاش مذبوحانه کردید آخرش چی شد؟
بی سوادی و مشکل داشتن خودتون ثابت شد.
تازه منم این چند روزه چیزهای خیلی بیشتری یاد گرفتم و کلا ارتقا پیدا کردم.
بحث با امثال شما منو قویتر میکنه.
و بیشتر نسبت به ماهیت و آمار افراد جامعه آگاه و مطمئن میشم که بازم برام مفیده.
همچنین امیدوارم برای دیگران هم مفید باشه تا جامعه ارتقا پیدا کنه.
درمقابل من این روشها کارایی نداره.
بهتره به فکر برطرف کردن ضعف های اساسی خودتون باشید.
هرچی دوست دارید کاریکاتور بذارید و مسخره کنید.
من قبلا هم گفتم خودم ظرفیت یک چیزی رو دارم که با دیگران اونطور رفتار میکنم.
اگر میگم بی سواد هستید، فکر میکنم این حرف مجازه و دیگران آزادی زدن اینطور حرفها رو دارن و باید داشته باشن.
شما هم میتونید به من بگید بی سواد.
من خیلی قویتر از شما هستم.
و اساس زندگیم رو طوری گذاشتم که کمترین وابستگی و ضعف رو به عوامل خارجی داشته باشم.
چطور میخواید با من نبرد کنید و منو شکست بدید؟
نمیتونید واقعیت رو بپذیرید.
خیلی از این حرفا حقیرتر هستید.
من هرچی هم مغرور باشم در چیزی که الان دارم بحث میکنم از شما دانش و بینش خیلی قویتری دارم.
اصرار شما در گلاویز شدن با من مثل اینه که یه آدم عادی بخواد با یک رزمی کار قوی گلاویز بشه.
خوشبختانه اینترنت هم اجازه نمیده که همتون با هم زورتون رو جمع کنید. البته تاحدی میتونید، ولی بازم نمیتونید کاری از پیش ببرید.

eshpilen
شنبه 08 بهمن 1390, 00:45 صبح
یاعلی
واقعا امیدوارم 5% هم که احتمال داره درست باشه و چیزی از مردانگی هم بدونی. نه اینکه همینطور از روی عادت و کلیشه یا بدتر از روی ریاکاری از این چیزها استفاده کنی.
من هنوز شک دارم که مشکل شما در نادانی و خنگ بودنه یا در کثیف بودن قلب یا در هردو (بهرصورت میشه گفت کسی که قلب کثیفی داره در نهایت نادان هم هست).
برام جالب و مفیده که از این قضیه مطمئن بشم.

MMSHFE
شنبه 08 بهمن 1390, 00:49 صبح
سودی در کرک کردن هش پسوردها برای هکر هست که میتواند خیلی هم زیاد باشد.
تاپیکی که به توضیح و اثبات این مطلب میپردازد: http://barnamenevis.org/showthread.php?325189
برای هکر مسلما شانس و مزیت بزرگی است که بتواند اصل پسورد کاربران را بدست بیاورد، چون میتواند برای نفوذ به اکانتهای دیگر کاربران، منجمله اکانت ایمیل آنها، بسیار مفید باشد. یک بار هک و کرک میکند و بعد میتواند از نتایج آن چند برابر استفاده ببرد و به اکانت حداقل بعضی از کاربران در سایتهایی هم که نمیتوانست هیچ رخنه ای در امنیت آنها بیابد نفوذ کند.

مرد حسابی، وقتی سورس کد و دیتابیس دستش هست، خوب یک خط کد توی سورس کد اضافه میکنه که هرگی لاگین کرد، یک نسخه از رمز رو براش ایمیل کنه. مریضه بره رمزگشایی کنه؟ تلاش برای رمزگشایی برای وقتی هست که دسترسی به سورس و دیتابیس نداشته باشیم. شما که اینقدر ادعای معلومات دارین، یکم خودتون رو جای هکری بگذارین که به همه چیز سایت دسترسی داره. خودتون کدوم راه رو انتخاب میکنید؟ چندین ساعت مهندسی معکوس برای رمزگشایی یا اضافه کردن یک خط کد ساده برای ارسال رمز کاربرانی که به درستی لاگین کردن به ایمیل خودتون؟ البته احتمالاً شما راه اول رو انتخاب میکنید! این از مسئله دسترسی به کد. اما در حالتی که دسترسی به کد مقدور نیست هم روشی که من گفتم برای ذخیره سالت ثابت بهتر از کد هست چون همونطور که خودتون قبلاً گفتین، برخی جاها ممکنه سورس کد به دلیل تنظیمات اشتباه htacess. یا هاست و... نشون داده بشه اما درهرحال فایل htaccess. نشون داده نمیشه و خطای Unauthorized Access دریافت خواهیم کرد (حتی اگه مستقیماً فایل رو درخواست کنیم).
موفق باشید.

eshpilen
شنبه 08 بهمن 1390, 00:57 صبح
مرد حسابی، وقتی سورس کد و دیتابیس دستش هست، خوب یک خط کد توی سورس کد اضافه میکنه که هرگی لاگین کرد، یک نسخه از رمز رو براش ایمیل کنه. مریضه بره رمزگشایی کنه؟ تلاش برای رمزگشایی برای وقتی هست که دسترسی به سورس و دیتابیس نداشته باشیم. شما که اینقدر ادعای معلومات دارین، یکم خودتون رو جای هکری بگذارین که به همه چیز سایت دسترسی داره. خودتون کدوم راه رو انتخاب میکنید؟ چندین ساعت مهندسی معکوس برای رمزگشایی یا اضافه کردن یک خط کد ساده برای ارسال رمز کاربرانی که به درستی لاگین کردن به ایمیل خودتون؟ البته احتمالاً شما راه اول رو انتخاب میکنید! این از مسئله دسترسی به کد. اما در حالتی که دسترسی به کد مقدور نیست هم روشی که من گفتم برای ذخیره سالت ثابت بهتر از کد هست چون همونطور که خودتون قبلاً گفتین، برخی جاها ممکنه سورس کد به دلیل تنظیمات اشتباه htacess. یا هاست و... نشون داده بشه اما درهرحال فایل htaccess. نشون داده نمیشه و خطای Unauthorized Access دریافت خواهیم کرد (حتی اگه مستقیماً فایل رو درخواست کنیم).
موفق باشید.
این رو که قبلا هم گفته بودید و جوابش رو داده بودم:

بله همچین چیزی شدنی هست و بنده هم بهش فکر کرده بودم.
ولی بهرحال این یه حملهء دیگری هست که محدودیتهای خودش رو هم داره و توجیهی برای این نمیشه که ما سیستم هش امن و اصولی ای رو پیاده سازی نکنیم.
چنین چیزی شدنی هست اما هکر باید منتظر بمونه تا چه وقت چه کسی لاگین بکنه یا نکنه. چقدر میخواد صبر کنه؟ خیلی کاربران ممکنه برای طولانی مدت autologin باشن و لاگین دستی نکنن، خیلی ها ممکنه دیر به دیر به سایت سر بزنن و بخوان لاگین هم بکنن، خیلی ها هم که بصورت موقت یا دائمی از سایت رفتن و به این زودیها به سایت نمیان. هکر باید منتظر بمونه تا یه مدت زمان نامعلومی که بعضی افراد لاگین کنن و فقط پسورد این افراد رو بدست میاره. بعدهم در این مدت این امکان حالا کم یا زیاد وجود داره که این نفوذ و دستکاری کدها فاش شده و جلوش گرفته بشه.

جناب هکر میتونه این کار و حمله رو هم انجام بده و بنظرم اگر منهم بودم این کار رو میکردم، ولی داشتن هش پسورد کل کاربران و حمله روی اون یه چیز دیگه هست که مزایا و شانس موفقیت خودش رو داره و میتونه بصورت موازی انجام بشه، بنابراین دلیلی نداره به متد طولانی و محدود خودش اکتفا بکنه. پس هکر میاد روی دیتابیس هم همزمان حملهء هش انجام میده و اگر سیستم شما ضعیف بوده باشه طبیعتا شانس کرک شدن پسوردهای بیشتری وجود داره. چرا خودش رو فقط به یکی از این روشها محدود بکنه؟

پس در اینطور موارد اینکه یه جای دیگه هم سوراخی وجود داره دلیل نمیشه ما سوراخهای دیگری رو که میتونیم ببندیم برطرف نکنیم. هر حفره ای مزایا و معایب و محدودیتهای خودش رو داره برای هکر. و میتونه با استفادهء همزمان از چند حفره، حمله های بیشتر و موفق تری رو صورت بده و سوء استفادهء بیشتری بکنه. ضمنا یه حالت دیگری هم که الان بنظرم رسید اینه که ممکنه هکر از یک راهی دسترسی خواندنی به فایلها پیدا کرده باشه ولی هنوز قابلیت نوشتن رو نداشته باشه. در این صورت میتونه الگوریتم و سالت ثابت رو دربیاره، اما نمیتونه کد Inject و اجرا کنه.
بهرحال در امنیت تا حدممکن باید محکم کاری کرد.

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

رضا قربانی
شنبه 08 بهمن 1390, 00:58 صبح
واقعا امیدوارم 5% هم که احتمال داره درست باشه و چیزی از مردانگی هم بدونی. نه اینکه همینطور از روی عادت و کلیشه یا بدتر از روی ریاکاری از این چیزها استفاده کنی. من هنوز شک دارم که مشکل شما در نادانی و خنگ بودنه یا در کثیف بودن قلب یا در هردو (بهرصورت میشه گفت کسی که قلب کثیفی داره در نهایت نادان هم هست). برام جالب و مفیده که از این قضیه مطمئن بشم. ============================================ عزیزم خب که چی.
واسه من این حرفا زیاد مهم نیست.
همون که امثال شما را رسوا کنم برام کافیه.
این همه تلاش مذبوحانه کردید آخرش چی شد؟
بی سوادی و مشکل داشتن خودتون ثابت شد.
تازه منم این چند روزه چیزهای خیلی بیشتری یاد گرفتم و کلا ارتقا پیدا کردم.
بحث با امثال شما منو قویتر میکنه.
و بیشتر نسبت به ماهیت و آمار افراد جامعه آگاه و مطمئن میشم که بازم برام مفیده.
همچنین امیدوارم برای دیگران هم مفید باشه تا جامعه ارتقا پیدا کنه.
درمقابل من این روشها کارایی نداره.
بهتره به فکر برطرف کردن ضعف های اساسی خودتون باشید.
هرچی دوست دارید کاریکاتور بذارید و مسخره کنید.
من قبلا هم گفتم خودم ظرفیت یک چیزی رو دارم که با دیگران اونطور رفتار میکنم.
اگر میگم بی سواد هستید، فکر میکنم این حرف مجازه و دیگران آزادی زدن اینطور حرفها رو دارن و باید داشته باشن.
شما هم میتونید به من بگید بی سواد.
من خیلی قویتر از شما هستم.
و اساس زندگیم رو طوری گذاشتم که کمترین وابستگی و ضعف رو به عوامل خارجی داشته باشم.
چطور میخواید با من نبرد کنید و منو شکست بدید؟
نمیتونید واقعیت رو بپذیرید.
خیلی از این حرفا حقیرتر هستید.
من هرچی هم مغرور باشم در چیزی که الان دارم بحث میکنم از شما دانش و بینش خیلی قویتری دارم.
اصرار شما در گلاویز شدن با من مثل اینه که یه آدم عادی بخواد با یک رزمی کار قوی گلاویز بشه.
خوشبختانه اینترنت هم اجازه نمیده که همتون با هم زورتون رو جمع کنید. البته تاحدی میتونید، ولی بازم نمیتونید کاری از پیش ببرید.




به ریچارد شیردل بگید شمشیر من رو بیاره :قهقهه:

هیچ چی نمی گیم سو استفاده نکن و روت باز نشه و هر چی چرت و پرت از دهنت در میاد روی کیبورد ننویس .



آقایون این مبحث رو تموم کنید . به اندازه کافی به سر هم پریدید و پریدیم .

MMSHFE
شنبه 08 بهمن 1390, 11:03 صبح
نمیتونید واقعیت رو بپذیرید.
خیلی از این حرفا حقیرتر هستید.
این حرفها مایه شرمساری هست یا حرفهایی که ازطرف بقیه منجمله بنده گفته شد؟

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


$search = array('دانش و بینش', 'قوی', 'آدم عادی', 'رزمی کار قوی');
$replace = array('ادعای', 'بیش', 'قهرمان المپیک', 'فرد معمولی');
$text = str_replace($search, $replace, $text);

:چشمک:

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

yones_safari
شنبه 08 بهمن 1390, 15:51 عصر
دوستان خواهشا بیخودی تایپیک بالا نیارین.و ویبولتین پیام خصوصی را آفرید.بچه که نیستید واسه یه حرف کوچیک هی تایپیک بالا میارین.من 2 روزه هی تایپیک میاد بالا و میبینم یکی عکس گذاشته انگار سایت تفریحی هستش.:قهقهه:یکی 100 خط انشاء نوشته:لبخند:و.....مطلب علمی اگه دارین بذارین کاربرا قضاوت کنن که کی بهتره!!خودتون واسه خودتون نوشابه باز نکنین.مرسی از همه.:قلب:

mohsen_31369
شنبه 08 بهمن 1390, 22:04 عصر
شرمنده. ابتدا برای آرام شدن جو یه صلوات بفرستید الهم صل علی ...
حالا یه سوال دارم راجع به key stretching .
کد زیر را در نظر بگیرید


<?php
echo md5('password').' ';
for($i=0;$i<=2000;$i++){
$hash=md5('password');
}
echo $hash;
?>

جوابش شد
5f4dcc3b5aa765d61d8327deb882cf99
5f4dcc3b5aa765d61d8327deb882cf99
جواب ها یکسان است
پس وقتی هکر هش پسورد را در دیتابیس دید برایش چه فرقی می کند که ما پسورد را یک بار هش کنیم یا دو هزار بار، جوابش که یکسان است.
اگه میشه توضیح دهید که چرا باید پسورد مثلا دو هزار بار هش شود؟
... محمد و آل محمد.

mbf5923
شنبه 08 بهمن 1390, 23:07 عصر
جواب ها یکسان است
قاط زدی؟ :قهقهه:

<?php
$hash= md5('password');
echo $hash."<br>";
for($i=0;$i<=2000;$i++){
$hash=md5($hash);
}
echo $hash;
?>

eshpilen
یک شنبه 09 بهمن 1390, 08:43 صبح
شرمنده. ابتدا برای آرام شدن جو یه صلوات بفرستید الهم صل علی ...
حالا یه سوال دارم راجع به key stretching .
کد زیر را در نظر بگیرید


<?php
echo md5('password').' ';
for($i=0;$i<=2000;$i++){
$hash=md5('password');
}
echo $hash;
?>

جوابش شد
5f4dcc3b5aa765d61d8327deb882cf99
5f4dcc3b5aa765d61d8327deb882cf99
جواب ها یکسان است
پس وقتی هکر هش پسورد را در دیتابیس دید برایش چه فرقی می کند که ما پسورد را یک بار هش کنیم یا دو هزار بار، جوابش که یکسان است.
اگه میشه توضیح دهید که چرا باید پسورد مثلا دو هزار بار هش شود؟
... محمد و آل محمد.
ما اینطوری نگفتیم که.
باید جوری نوشت که جواب هر هش به هش مرحلهء قبل هم وابسته باشه.
این مثال مشابه روشی که phpass (http://www.openwall.com/phpass/)استفاده میکنه کار میکنه:

<?php

$count=3000;

$password='user1 password';
$salt='user1 salt';

$t1=microtime(true);

$hash = md5($salt.$password);

echo 'hash1: ', $hash, '<br>';

do {
$hash = md5($hash.$password);
} while(--$count);

echo 'hash2: ', $hash, '<br>';

$t2=microtime(true);

echo 'time spent: ', $t2-$t1;

?>
البته تعداد دورهای phpass ظاهرا بصورت پیشفرض روی حدود 8000 دوره.
در ضمن md5 بعنوان آخرین متد استفاده میشه وقتی اکستنشن ها و توابع بهتر دیگه در دسترس نیستن.
پس فکر نکنید چون مثال ما به این شکل و با md5 هست یعنی داریم این شکل کد و استفاده از md5 رو بعنوان روش اول تایید میکنیم لزوما. این کد در phpass همونطور که خودش کامنت گذاشته فقط بعنوان آخرین راه درصورت در دسترس نبودن توابع دیگه یا برای داشتن Portability کامل استفاده میشه. بنابراین، در یک کد کامل برای بالاترین امنیت باید اول سعی کرد از الگوریتم های امن تری مثل bcrypt استفاده کرد.

mohsen.gorji
سه شنبه 11 بهمن 1390, 03:52 صبح
eshpilen

كارت درسته تعداد اين آدما زياد شده !

eshpilen
سه شنبه 11 بهمن 1390, 17:45 عصر
خب اینم یه کد کامل که روش تولید و چک کردن یک هش امن رو نشون میده.
البته این کد بازهم مثال و آزمایشی هست، ولی بهرحال اصول کلی همینه و فکر میکنم همین بقدر کافی قابل استفاده باشه. من خودم در پروژم از bcrypt استفاده کرده بودم ولی تازگی که روی یک هاست خاص تست کردم متوجه شدم نسخهء PHP اون 5.2.17 هست و الگوریتم استفاده شده در bcrypt رو ساپورت نمیکرد ظاهرا. بخاطر همین میخوام کد خودم رو هم عوض کنم و یحتمل از مشابه همین کد که برتون میذارم در پروژهء خودم هم استفاده کنم.

البته احتمالا کدها در مرورگر شما کمی خراب میشن (بخاطر اشکال سیستم نمایش کدهای این فروم)، بخاطر همین این کد رو میتونید از فایل ضمیمه شده دریافت کنید.


<?php

header('Content-Type: text/html; charset=utf-8');
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: private, no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0");
header('Pragma: private');
header("Pragma: no-cache");

//==================================

function crypt_random($min = 0, $max = 0x7FFFFFFF)
{
if ($min == $max) {
return $min;
}

if (function_exists('openssl_random_pseudo_bytes')) {
// openssl_random_pseudo_bytes() is slow on windows per the following:
// http://stackoverflow.com/questions/1940168/openssl-random-pseudo-bytes-is-slow-php
if ((PHP_OS & "\xDF\xDF\xDF") !== 'WIN') { // PHP_OS & "\xDF\xDF\xDF" == strtoupper(substr(PHP_OS, 0, 3)), but a lot faster
extract(unpack('Nrandom', openssl_random_pseudo_bytes(4)));

return abs($random) % ($max - $min) + $min;
}
}

// see http://en.wikipedia.org/wiki//dev/random
static $urandom = true;
if ($urandom === true) {
// Warning's will be output unles the error suppression operator is used. Errors such as
// "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
$urandom = @fopen('/dev/urandom', 'rb');
}
if (!is_bool($urandom)) {
extract(unpack('Nrandom', fread($urandom, 4)));

// say $min = 0 and $max = 3. if we didn't do abs() then we could have stuff like this:
// -4 % 3 + 0 = -1, even though -1 < $min
return abs($random) % ($max - $min) + $min;
}

/* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called.
Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here:

http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/

The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro:

http://svn.php.net/viewvc/php/php-src/tags/php_5_3_2/ext/standard/php_rand.h?view=markup */
if (version_compare(PHP_VERSION, '5.2.5', '<=')) {
static $seeded;
if (!isset($seeded)) {
$seeded = true;
mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF));
}
}

static $crypto;

// The CSPRNG's Yarrow and Fortuna periodically reseed. This function can be reseeded by hitting F5
// in the browser and reloading the page.

if (!isset($crypto)) {
$key = $iv = '';
for ($i = 0; $i < 8; $i++) {
$key.= pack('n', mt_rand(0, 0xFFFF));
$iv .= pack('n', mt_rand(0, 0xFFFF));
}
switch (true) {
case class_exists('Crypt_AES'):
$crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
break;
case class_exists('Crypt_TripleDES'):
$crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
break;
case class_exists('Crypt_DES'):
$crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
break;
case class_exists('Crypt_RC4'):
$crypto = new Crypt_RC4();
break;
default:
extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF)))));
return abs($random) % ($max - $min) + $min;
}
$crypto->setKey($key);
$crypto->setIV($iv);
$crypto->enableContinuousBuffer();
}

extract(unpack('Nrandom', $crypto->encrypt("\0\0\0\0")));
return abs($random) % ($max - $min) + $min;
}

//==================================

function random_bytes($length) {
$bytes = '';
for($i = 0; $i < $length; $i++) $bytes.=chr(crypt_random(0, 255));
return $bytes;
}

//==================================

function create_secure_hash($password, $rounds=4000) {

$salt=random_bytes(16);
//16 bytes = 128 bits -- note that our salt is a binary salt

global $pepper;

$hash=hash('sha256', $pepper.$salt.$password, true);

$tmp=$rounds;
do {
$hash=hash('sha256', $hash.$password, true);
} while(--$tmp);

return base64_encode($rounds.'*'.$salt.$hash);

}

//==================================

function check_secure_hash($hash, $password) {

$hash=base64_decode($hash);

$rounds=substr($hash, 0, strpos($hash, '*'));

$salt=substr($hash, strpos($hash, '*')+1, strlen($hash)-strlen($rounds)-32-1);

$hash=substr($hash, strlen($hash)-32);

global $pepper;

$tmp=$hash;

$hash=hash('sha256', $pepper.$salt.$password, true);

do {
$hash=hash('sha256', $hash.$password, true);
} while(--$rounds);

return $tmp===$hash;

}

//==================================

$pepper="89JPa36HW7Uiq348dX10ks";
/* 26 uppercase + 26 lowercase + 10 digits = 62
62^21 < 2^128 but 62^22 > 2^128 => min length = 22 */

$password='user password';

$t1=microtime(true);
$hash=create_secure_hash($password);
$t2=microtime(true);

echo 'computing secure hash...<br>';
echo 'secure hash: ', $hash;
echo '<br>', 'time spent: ', $t2-$t1;
echo '<br>';

echo 'verifying secure hash...<br>';
if(check_secure_hash($hash, $password)) echo '<span style="color: green">Password is correct.</span>';
else echo '<span style="color: red">Password is incorrect!</span>';

?>


توضیحات و نکات:

در این روش از یک سالت ثابت ($pepper) استفاده کردیم که یک رشتهء رندوم متشکل از حروف بزرگ و کوچک و اعداد هست و طولش باید حداقل 22 کاراکتر باشه تا معادل یک کلید 128 بیتی حالت و استحکام امنیتی داشته باشه. امروزه حداقل کلید استاندارد رمزنگاری 128 بیت هست. یعنی تعداد حالتهای یک کلید 128 بیتی اونقدری زیاده که امکان حملهء Brute-force روی اون امکان نداره.

سالت ثابت رو میتونید در کد، یا جای دیگری اگر بنظرتون مناسبتره، ذخیره کنید. بیشتر مهم اینه که در دیتابیس نباشه.

سالت ثابت باید به ازای هر سایت متفاوت باشه. یعنی هر سایتی که راه اندازی میکنید باید مقدار سالت ثابت رو تغییر بدید. یک رشتهء رندوم متشکل از اعداد، حروف کوچک، و حروف بزرگ، با طول 22 کاراکتر.

طول سالت رندوم رو هم برابر 16 بایت باینری درنظر گرفتم که تعداد حالتهایی ممکن این هم برابر یک کلید 128 بیتی میشه. ولی بیشتر جاها از سالتهای رندوم کوچکتری استفاده میکنن. بهرحال کار از محکم کاری عیب نمیکنه و ذخیره چند بایت اضافه تر به ازای هر کاربر در دیتابیس فکر نمیکنم به هیچ وجه هزینه ای باشه که برای سایتی مشکل ایجاد کنه. شخصا ترجیح میدم روزهء شک دار نگیرم و از یک چنین سالت حداکثری استفاده کنم.

در این برنامه از الگوریتم هش SHA256 استفاده شده.
تعداد دورها بصورت پیشفرض روی 4000 هست ولی با تعیین پارامتر دوم تابع create_secure_hash قابل تغییره.
با تعداد دور پیشفرض، محاسبهء هر هش روی سیستم بنده (CPU 2.53 GHz) حدود 2 صدم ثانیه زمان صرف میکنه.
تعداد دورها باید مقداری تنظیم بشه که برای سایت و کاربران مشکل قابل مشاهده ای ایجاد نکنه. هرچه تعداد دورها بیشتر باشه و زمان مصرف شده به ازای هر هش بیشتر، امنیت هم بیشتر میشه چون کرک کردن هش به نسبت همون فاکتور کاهش سرعت دشوارتر میشه. گفته شده تا یک دهم ثانیه زمان هم برای کاربر و سایتهای معمولی میتونه بدون مشکل باشه. خب این به ترافیک سایت هم برمیگرده. ولی بهرحال اگر فکر میکنید این سیستم بار خیلی سنگینی رو به سرور تحمیل میکنه به این نکته هم توجه داشته باشید که معمولا ترافیک در بخش ثبت نام و لاگین سایت تنها کسر کوچکی از کل ترافیک سایت هست و بنابراین این پردازش و زمان اضافه به همون نسبت در کل ترافیک سایت گم میشه و تاثیر کمی روی بار کلی سرور میذاره. در ضمن در نهایت بخاطر امنیت مجبوریم این هزینه ها رو بپردازیم و این یک متد استاندارد و کاملا علمی و حرفه ای هست.

برنامهء ما تعداد دورها رو در خود رشتهء خروجی هش ذخیره میکنه و موقع verify کردن اون رو میخونه. بنابراین اگر تعداد دورها رو بعدا تغییر بدیم، مشکلی در چک کردن هش های قبلی ذخیره شده در دیتابیس که با تعداد دور متفاوتی ایجاد شدن نخواهیم داشت. اما باید توجه داشت که به این خاطر طول هش خروجی میتونه متغییر باشه. بطور مثال اگر از تعداد دور 10 هزار استفاده کنیم چون تعداد ارقام اون یکی بیشتر از 4 هزار هست پس طول هش خروجی یک کاراکتر بیشتر میشه. الان با 4000 طول هش خروجی 72 کاراکتره. پس حداکثر طول فیلد دیتابیس مخصوص ذخیرهء هش رو همیشه چند کاراکتر بیشتر بگیرید.
البته هش اولیه درواقع باینری بوده که ما اون رو به فرمت Base64 تبدیل کردیم تا ذخیرهء اون در فیلدهای دیتابیس کاراکتری امکان پذیر باشه که خواناتر هم هست، اما اگر کسی بخواد میتونه براحتی کد رو دستکاری کنه تا از خروجی باینری استفاده کنه؛ به این شکل طول رشتهء خروجی مقداری کمتر میشه (مثلا 72 بایت به 53 بایت تبدیل میشه).

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

خب فکر کنم توضیحات کافی بود.
این کد نمونه سیستمی هست که تمام متدهای اصلی رو بکار برده: سالت ثابت، سالت رندوم به ازای هر پسورد/اکانت، و متد key stretching.