• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چند سوال در مورد امنیت پروزه
#1
سلام دوستان ، وقت بخیر .


سوال اول : تا جایی که من اطلاع دارم پسوردها در سیستم مدیریت محتوایی مانند وردپرس به صورت Md5 ذخیره می شوند ، اما چند وقت پیش تو یکی از پست های سایت خوندم که
پسوردهایی که به صورت md5 قابل شکست هستند ، میخواستم بدونم این مطلب صحت داره یا خیر . پیشنهاد شما برای ذخیره پسورد چه روشی هست ؟!


سوال دوم : من با کتابخانه GD عکسی رو در هاست اپلود می کنم . کدها مشکلی ندارند و اجرا میشن ، اما مشکلی که هست اینکه وقتی مجوز پوشه ای که عکس های روی اون اپلود میشن 777 نباشه ، خطا بروزه می ده ، در هر حالی که باید با پرمیشن 666 مشکلی بروز نکند . به نظر شما چه دلیلی داره که چنین خطایی رخ می ده ؟ ایا اینکه یک پوشه روی هاست مجوز 777 داشته باشد امنیت سایت را تهدید می کند ؟!
معلومات تکمیلی : از هاست اشتراک استفاده می کنم و Current PHP version: 5.3.29


سوال سوم : می دونید که بعد از عضویت کاربران ایمیلی برای این اونها ارسال میشه و این ایمیل حاوی یک کد فعالسازی هست ، ممنون میشم در مورد این موضوع یک توضیحاتی بدین که این لینک های فعالسازی بر چه اساسی تولید میشن ، و اینکه ایا برای هر یوزر باید فیلدی داشته باشیم که مشخص کنه این عضو روی لینک فعالسازی کلیک کرده یا خیر ، کلمات کلیدی مرتبط با این موضوع چی هستند ؟!
  پاسخ
تشکر شده توسط :
#2
(۱۳۹۴ تير ۲۶, ۱۱:۲۸ ب.ظ)بیتا حکمت نوشته: سلام دوستان ، وقت بخیر .


سوال اول : تا جایی که من اطلاع دارم پسوردها در سیستم مدیریت محتوایی مانند وردپرس به صورت Md5 ذخیره می شوند ، اما چند وقت پیش تو یکی از پست های سایت خوندم که
پسوردهایی که به صورت md5 قابل شکست هستند ، میخواستم بدونم این مطلب صحت داره یا خیر . پیشنهاد شما برای ذخیره پسورد چه روشی هست ؟!


سوال دوم : من با کتابخانه GD عکسی رو در هاست اپلود می کنم . کدها مشکلی ندارند و اجرا میشن ، اما مشکلی که هست اینکه وقتی مجوز پوشه ای که عکس های روی اون اپلود میشن 777 نباشه ، خطا بروزه می ده ، در هر حالی که باید با پرمیشن 666 مشکلی بروز نکند . به نظر شما چه دلیلی داره که چنین خطایی رخ می ده ؟ ایا اینکه یک پوشه روی هاست مجوز 777 داشته باشد امنیت سایت را تهدید می کند ؟!
معلومات تکمیلی : از هاست اشتراک استفاده می کنم و Current PHP version: 5.3.29


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


سلام ،

در مورد سوال اول ، باید بگم MD5 قابل شکست نیست ، فقط قابل Crack هست ، که اون هم به این صورته که شما از Hash به Plain نمیرسید ، بلکه از Plain به Hash می رسید


ینی اگر یک Hash داشته باشیم باید اینقدر رشته های مختلف رو md5 کنیم تا Hash ـی که ساخته ایم برابر شود با md5 ـی که بدست آورده ایم

البته توی MD5 تصادم داریما ، ینی ممکنه 2 تا رشته 1 هش کاملا مشابه داشته باشند ، ولی احتمالش میدونی چقدره !؟ 1 تقسیم بر (2 به توان 128) تقریبا میشه 2.39 ضربدر 10 به توان منفی 39

اما اینکه چرا نمیشه MD5 را کرک کرد ، علت علمیش رو نمیگم ، به این بسنده میکنم :
ببین مثلا عدد 10 ، تو میتونی بگی این عدد حتما از جمع 2 عدد x و y به وجود اومده !؟ مثلا نه !
چرا !؟ چون ممکنه 10 حاصل 5+5 باشه ، ممکنه حاصل 8+2 باشه و... ، حتی حالات اعشاری ، ممکنه حاصل 9.99 و 0.01 باشه
این یعنی بی نهایت مقدار برای x و y تصور میشن

برای md5 هم همینطوره

یه جورایی باید بگم خیالت در مورد MD5 راحت باشه فعلا

ببین مثلا الآن الگوریتم AES رو هم با XFS میشه یه حرکتایی زد روش (با اون امنیت بالا!!!)
ولی به هرحال اگر خیلی خیلی خیلی میخوای امن باشی ، AES گزینه ی خوبیست !

در مورد وردپرس هم باید بگم اشتباه خوندی ، الگوریتم وردپرس md5 نیست ، یه الگوریتم دست سازه که خودشون ساختن

سوالای 2و3 رو بلد نیستم Big Grin

امیدوارم مفید بوده باشه Heart
  پاسخ
تشکر شده توسط : بیتا حکمت Goback
#3
بابت جوابای مفید ممنونم ، این لینک هم در مورد MD5 بودن یا نبودن پسوردهای وردپرس هست :
http://stackoverflow.com/questions/10459...dpress-use
( من تو گفتی و گوی بعضی از کاربران خونده بودم که وردپرس از MD5 استفاده می کنه ، ولی ظاهرا" تو دیتابیس سایت من که Md5 نیست ) ، بازم ممنونم
  پاسخ
تشکر شده توسط :
#4
سلام،
سوال اول، به نظر من که به MD5 نه باید، و نه میشه اطمینان داشت، MD5 برای پسوردهای امن، امن هست، ولی مثلا پسورد ۱۲۳۴۵۶۷۸۹ چی ؟ که ماشالا تو ایران کم هم نیست!
بهتره از کتابخانه‌‌های رمزنگاری استفاده بشه.

سوال سوم، روند کار این هست که شما توی جدول کاربرهاتون باید یک صفت بزارین برای مثال activation، در حالت عادی این صفت می‌تونه خالی باشه، اما برای کاربرهایی که جدید عضو میشن یک رشته تصادفی باشه. (تولید کردن یک رشته که مشکلی نیست، میتونید مثلا timestamp و نام کاربری رو برای مثال MD5 کنید تا یک رشته بدست بیاد، برای مثال میگم البته‌ها!)
توی ایمیلی که برای کاربر ارسال میشه در جایی از آدرس مثلا (http://yoursite.co/?activation=[random_string]) رشته رو قرار میدن و توی اون آدرس چک میکنن آیا رشته‌ای که اومده مربوط به این کاربر هست یا نه.(آی‌دی کاربر رو هم باید توی آدرس بزارین البته) اگه بود که صفت activation برای اون کاربر خالی میشه، و با چک کردن خالی بودن همون فیلد میشه فهمید کاربر اکتیو هست یا نه. ( من این کار رو میکردم، اگه بچه‌ها راه بهتری میدونن بگن منم استفاده میکنم Smile )

سوال دوم رو کار نکردم.

خیلی جالبه که من تا حالا فکر میکردم وردپرس MD5 هست!
حتی یک بار رمز عبورم رو یادم رفته بود از طریق MD5 از توی پایگاه داده عوض کرده بودم!!
احتمالا عوض کردن دیگه.
غایب
  پاسخ
تشکر شده توسط :
#5
از MD5 به همراه یک مقدار به عنوان salt استفاده کنید. بر فرض کاربر رمزش رو انتخاب میکنه 123456 و شما هم یک مقدار salt تعیین میکنید به صورت @#$ds554ADF و ترکیب این دو رو md5 و ذخیره میکنید. اکثرا به این شکل از md5 استفاده میکنند ، حالا شما میتونی همین رو بسط بدی و خیلی کارهای دیگه بکنی.
  پاسخ
تشکر شده توسط : بیتا حکمت
#6
نقل قول:اینکه وقتی مجوز پوشه ای که عکس های روی اون اپلود میشن 777 نباشه ، خطا بروزه می ده ، در هر حالی که باید با پرمیشن 666 مشکلی بروز نکند
فکر نمیکنم به پرمیشن آخر (others) نیازی باشه.
پرمیشن دوم هم شاید نیاز نباشه (بسته به کانفیگ و شرایط سرور و برنامهء شما).
بنابراین میتونید با این پرمیشن ها هم امتحان کنید: 700 و 770
این دوتا از 777 امن تر هستن. البته 700 هم از 770 امن تره. ولی در کل بستگی به کانفیگ هاست هم داره.

پرمیشن خواندن: 4
پرمیشن نوشتن: 2
پرمیشن اجرا: 1

باید ببینید به چه مجوزهایی نیازی دارید.
پرمیشن=0
چون میخواید در پوشه فایل جدید ایجاد کنید پس نیاز به پرمیشن نوشتن دارید. پرمیشن=پرمیشن+2=2
اگر نیاز دارید قابلیت لیست گرفتن محتویات پوشه (گرفتن لیست فایلهای موجود، نه مشخص کردن یک فایل خاص که از قبل اسمش رو میدونید) رو هم داشته باشید نیاز به مجوز خواندن هم دارید. پرمیشن=پرمیشن+4=6
به مجوز اجرا هم برای دسترسی به محتویات و اطلاعات هر فایل درون یک پوشه نیاز است. بنابراین: پرمیشن=پرمیشن+1=7

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

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

نقل قول:البته توی MD5 تصادم داریما ، ینی ممکنه 2 تا رشته 1 هش کاملا مشابه داشته باشند ، ولی احتمالش میدونی چقدره !؟ 1 تقسیم بر (2 به توان 128) تقریبا میشه 2.39 ضربدر 10 به توان منفی 39
تاجاییکه میدونم بر اساس Birthday attack، احتمالش 1 تقسیم بر 2 به توان 64 است.
با اینکه 1 تقسیم بر 2 به توان 64 هم عدد بزرگیه و هنوزم چنین پردازشی از دسترس رایانه های عادی خارجه، ولی بهرحال از 1 تقسیم بر 2 به توان 128 خیلی خیلی کوچکتره.
برای کامل تر بودن مطلب باید بگم که Birthday attack درمورد الگوریتم های هش صدق میکنه اما درمورد الگوریتم های رمزنگاری مثل AES صدق نمیکنه ها! (این «ها» آخرش خیلی مهم بود باید میگم Big Grin)
نقل قول:ببین مثلا الآن الگوریتم AES رو هم با XFS میشه یه حرکتایی زد روش (با اون امنیت بالا!!!)
XFS چیه دیگه؟!

نقل قول:تولید کردن یک رشته که مشکلی نیست، میتونید مثلا timestamp و نام کاربری رو برای مثال MD5 کنید تا یک رشته بدست بیاد، برای مثال میگم البته‌ها!
مثال بدی بود، چون هر دوی این اطلاعات در دسترس کاربر هستن و به این شکل میشه سیستم رو براحتی Brute-force کرد.
راستی مثل اینکه شما هم متوجه اهمیت «ها» در انتهای جملات شدیدها Big Grin

(۱۳۹۴ تير ۲۷, ۰۷:۱۰ ق.ظ)بیتا حکمت نوشته: بابت جوابای مفید ممنونم ، این لینک هم در مورد MD5 بودن یا نبودن پسوردهای وردپرس هست :
http://stackoverflow.com/questions/10459...dpress-use
( من تو گفتی و گوی بعضی از کاربران خونده بودم که وردپرس از MD5 استفاده می کنه ، ولی ظاهرا" تو دیتابیس سایت من که Md5 نیست ) ، بازم ممنونم
توی لینکی که خودت گذاشتی نوشته در نسخه های قدیمی از md5 استفاده میکرده ولی الان از Portable PHP password hashing framework استفاده میکنه. بخوام مختصر بگم این سیستم میتونه چند نوع هش با چند الگوریتم مختلف رو تولید کنه و تشخیص بده و استفاده کنه. یعنی توی دیتابیس وردپرس حتی اگر همزمان چند نوع هش باشه که این فریمورک ساپورت میکنه میتونه با همشون کار کنه. حالا چرا چند الگوریتم؟ خب یک دلیلش اینه که بصورت خودکار میاد تشخیص میده روی هاست چه کتابخانه ها/الگوریتم هایی وجود داره و ساپورت میشه و در دسترس هست، و سعی میکنه از بهترین روشی که در دسترس قرار داره استفاده کنه. مثلا اگر bcrypt در دسترس باشه احتمالا از bcrypt استفاده میکنه، ولی اگر در دسترس نباشه از یک الگوریتم ضعیف تر. البته جزییاتش یادم نیست دیگه ولی خیلی وقت پیش درموردش تحقیق کردم و کدش رو هم مطالعه کرده بودم. نوع الگوریتم رشته های هش رو هم از روی فرمت خاصی که هرکدام دارن و موقع تولید شدن اون فرمت رو خودش ایجاد کرده تشخیص میده.
  پاسخ
تشکر شده توسط : alireza378 بیتا حکمت Goback
#7
نقل قول: XFS چیه دیگه؟!
تو یه مقاله خونده بودمش ، الآن پیداش نمیکنم :|
پیدا کردم لینکشو میذارم
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان