PDA

View Full Version : چند سوال در مورد امنیت پروزه



بیتا حکمت
جمعه 26 تیر 1394, 21:35 عصر
سلام دوستان ، وقت بخیر .


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


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


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

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

راستش من Source مربوط به WordPress را ندیدم اما md5 یک تابع hash هست و برگشت پذیر نیست. کاری که سایت های موجود برای برگردان md5 انجام میدن در واقع جستجو در پایگاه داده خودشون برای بررسی این هست که ایا hash موجود را دارن یا نه ! تنها راه حمله هم Brute Force و حدس زدن هست. چون md5 تایع خیلی سریعی هست امکان پیدا کردنشش هم روی کامپیورت های بزرگ میره بالا اما نه وقتی شما رشته مربوط را با salt (حالا یا salt ثابت مثل یک رشته ثابت یا مثلا ترکیبش با ip یا timestamp زمان ثبت نام با الگورتیم متغیر) ۹۰ هزار با md5 کنید.

میتونی از این تابع (http://php.net/manual/en/function.password-hash.php) استفاده کنی که کلا برای همین کار به وجود اومده و توضیحات و سورس کد هم داره.



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


کلا پوشه 777 داشتن درست نیست.
شما permission را بگذار 770 و php نباد هیچ مشکلی داشته باشه و مشکل امنیتی هم دیگه نیست. اگه باز هم مشکل وجود داره مربوط به Hosting شما میشه و اونها کانفیگ را درست انجام ندادن و در واقع Apache نه مالک فایل هست نه عضو گروهی که دسترسی write داره که این مشکل ساز میشه برای شما.


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

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

روش کار عموما اینطوریه :
توی پروفایل کاربر برای بررسی این موضوع نیاز به دو تا فیلد داریم ، یکی فیلد وضعیت هست که تعیین میکنه وضعیت حساب کاربری چیه (مثلا ۰ برای غیر فعال بودن ، ۱ برای ایمیل تایید شده ، ۲ برای تعلیق حساب کاربری). یک فیلد هم با یک مقدار hash درست میشه. حالا پروفایل را با مقدار وضعیت 0 و مثلا هش HiERkfj98904TGFGFRF45 ایجاد میکنیم و چنین لینیکی را میگذاریم توی ایمیلش :

http://www.domain.com/verifyemail.php?x=HiERkfj98904TGFGFRF45

حالا اگه کاربر روش کلیک کنه از hash مقابل x یک select میگیریم و اگه کاربر با این hash بود با update کردن وضعیت به مقدار ۱ حسابش را فعال و تایید میکینم.

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

موفق باشین.