PDA

View Full Version : گفتگو: چگونه از اجرای فایل حارج از include جلوگیری کنیم



DelDard
شنبه 16 بهمن 1395, 16:07 عصر
سلام دوستان
فرض کنید ما فایلی داریم به اسم controlPanel.php به عنوان فایل اصلی ما که همه چی توش include میشه که جایی از اون ما فایل deleteMember.php رو include کردیم . خب ما اول فایل controlPanel لاگین بودن و همه دسترسی هارو با تابعی مثلا به نامه is_login چک میکنیم. بعد وقتی ادمین فلان کاربر رو انتخاب کرد و گزینه "حذف" رو زد اطلاعات دوباره به همین controlPanel ارسال میشه و فایل deleteMember که اینکلود شده اون رو حذف میکنه.

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

یا اصلا بیاید فرض سوال رو عوض کنیم. (ببخشید عملا شد دو تا سوال)

فرض کنید ما اطلاعات فرم حذف کاربر تو controlPanel ر با AJAX فرستادیم مستقیمن به فایل deleteMember بعد جوابش رو برگردوندیم به controlPanel برای نمایش . برای چک کردن دسترسی هم تابع is_login رو بالای deleteMember قرار دادیم. حالا چی؟
وقتی فایل deleteMember اصلا تو مرورگر کاربر سایت لود نشده چطور باید سشن ها رو بخونه؟ یعنی منظورم اینه که چطور باید is_login کار کنه وقتی اصلا از سمت مرورگر فراخانی نشده بلکه یه سری دیتا با POST براش ارسال شده؟


ببخشید نمونه کد نزاشتم چون هنوز چیزی ننوشتم و هنوز دارم فکر میکنم که روند کار چی باشه :/ اینکلود کنم نکنم؟ is_login کار میکنه نمیکنه؟ دارم گیج میزنم. لطفا راهنمایی کنید دوستان شما که با تجربه ترید.
ممنون از وقتی که گذاشتید

plague
شنبه 16 بهمن 1395, 17:41 عصر
میتونی یه متغیر تو فایل پدر تعریف کنی و تو فایل اینکلود شده چک کنی اگه اون متغیر نبود اجرا نشه
میتونی یع فولدر بزاری برای فایل هایی که قراره اینکلود بشن بعد با htaccess دسترسی مستقیم به محتویات اون فولدر رو غیر فعال کنی
<IfModule authz_core_module>
Require all denied
</IfModule>
<IfModule !authz_core_module>
Deny from all
</IfModule>

DelDard
یک شنبه 17 بهمن 1395, 12:18 عصر
خیلی ممنون دوستم همین کارو میکنم

فقط درباره سوال دومم میشه راهنمایی کنید دوستم؟
اینکه چطور وقتی فایلی تو مرورگر فراخاوانی نمیشه باید تایین هویت کاربر رو انجام بده؟ همین که اینجا اول تاپیک گفتم:


فرض کنید ما اطلاعات فرم حذف کاربر تو controlPanel ر با AJAX فرستادیم مستقیمن به فایل deleteMember بعد جوابش رو برگردوندیم به controlPanel برای نمایش . برای چک کردن دسترسی هم تابع is_login رو بالای deleteMember قرار دادیم. حالا چی؟
وقتی فایل deleteMember اصلا تو مرورگر کاربر سایت لود نشده چطور باید سشن ها رو بخونه؟ یعنی منظورم اینه که چطور باید is_login کار کنه وقتی اصلا از سمت مرورگر فراخانی نشده بلکه یه سری دیتا با POST براش ارسال شده؟

plague
یک شنبه 17 بهمن 1395, 14:01 عصر
دیتایی که پست میشه حالا با ایجکس یا بدون ایجکس از توی مرورگر کاربر استارت میخوره و درخواست داده میشه به سرور
پس اطلاعات کاربر از جمله کوکی هاش هم برای سرور ارسال میشه

DelDard
یک شنبه 17 بهمن 1395, 14:31 عصر
عه چه جالب! راجبه سشن هم صدق میکنه مثل کوکی؟

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

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

plague
دوشنبه 18 بهمن 1395, 02:41 صبح
اطلاعات سشن توی کوکی کاربر زخیره میشن
خوده سشن هم روی سرور ذخیره میشه نه کامپیوتر کاربر
از روی کوکی کارب رمیفهمه کدوم سشن ماله اونه

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