سوال در مورد امنیت

پرسیده شده
فعالیت 1454 روز پیش
دیده شده 972 بار
1

سلام
ببخشید من یه قسمت رو متوجه نشدم یعنی ما باید برای هر فایلی که داریم و میخوایم اونو امن کنیم از این شرط استفاده کنیم؟

فایل پیوست

امید عرب زادگان
امید عرب زادگان

15 اردیبهشت 99

6

مورد تایید استاد

حذف شده

سلام و احترام

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

در بخش MVC این مشکلات حل شده است چون فایل ها به صورت مستقیم فراخوانی نمی‌شوند و آن‌ها را با route ها صدا می‌زنیم.

فایل پیوست

امیر صالحی

توسط

امیر صالحی

15 اردیبهشت 99

4

مورد تایید استاد

حذف شده

سلام.

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

 

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

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

برای مثال روی همین پروژه ی ۷todo اگر یک فایل .htaccess در مسیر روت پروژه ایجاد کنیم و دستورات پایینو بنویسیم:

Options +FollowSymlinks
RewriteEngine On

RewriteCond %{REQUEST_URI} ^.*/libs
RewriteRule ^(.*)$ index.php [L,NC,QSA]

طبق شرط، درخواستهایی که حاوی /libs باشن به index.php ریدایرکت میشن.

ولی الان نمیتونید برای مثال با فایل assets چنین کاریو کنید، چون باید فایل های css , js, font شما لود شن و اگر اینکارو کنید، مسیر فایل های assets هم به index.php ریدایرکت میشه. میتونید تست  کنید ctrl + f۵ بزنید و میبینید استایل لود نمیشه. همچنین برای دایرکتوری process و tpl هم نمیتونید چون صفحه هایی هستن که باید لود بشن و تفسیر بشن، نه اینکه ریدایرکت بشن به index.php و اگر چنین کاریو کنید یک loop اتفاق میوفته و اصلا سایت باز نمیشه.

این مسئله و ریدایرکت کردن تمام درخواست ها، به ساختار پروژه، مربوط هست که باید با آموزش ها پیش برید تا جلوتر با ساختارهای جدیدتر آشنا بشید.

بنابراین، در این نقطه از مسیر آموزشی، از defined استفاده کنید.

 

فایل پیوست

محسن موحد

توسط

محسن موحد

15 اردیبهشت 99

1

مورد تایید استاد

حذف شده

سلام مجدد.

یک راه دیگم هست، میتونید داخل دایرکتوری هایی که فایل هاش بصورت مستقیم باز نمیشه و در فایلی مثل index.php اینکلود شدن، (برای مثال در این پروژه ی ۷todo) داخل هر کدوم از دایرکتوری های bootstrap, libs, tpl, vendor (بجز دایرکتوری process چون بصورت مستقیم از ajax صدا زده میشه) فایل .htaccess بسازید و این دو خط رو بنویسید:

Order Deny,Allow
Deny From All

به این دایرکتوری ها و فایل های درونشون، حتی فایل ها و دایرکتوری های بالاتر دسترسی بسته میشه.

برای مثال اگر در vendor فایل .htaccess ایجاد کنید و این آدرس رو بزنید:

http://localhost/7todo/vendor/symfony/translation/Translator.php

با این خطا روبرو میشید:

Forbidden
You don't have permission to access /7todo/vendor/symfony/translation/Translator.php on this server.

یا مثلا:

http://localhost/7Todo/libs/helpers.php

داشتم فایل های پروژه های قدیمو میدیدم که دیدم ازش استفاده کردم و توو این تاپیک اضافش کردم.

اما همونطور که میبینید، این هم یک کار تکراریه و حالا اینجا ۴ تا دایرکتوری بود ولی مثلا یک پروژه ی بزرگ کلی دایرکتوری داره و منطقی نیست، داخل تک تک دایرکتوری ها، این فایلو ایجاد کرد.

* البته بجای ایجاد این همه فایل میشه از تگ دایرکتوری استفاده کرد و مسیرهارو بهش داد ولی بازم راه مناسبتر با توجه به ساختار پروژه، راه پست قبلیه که تمام ریکوئست ها به یکجا ارسال بشن.(البته پست قبلو براساس یک فریمورک PHP گفتم.)

یعنی مثلا فایل های core پروژه رو داخل root قرار میدیم و فایل index.php و فایل های assets و ... رو یک پوشه بالاتر قرار میدیم و وقتی درخواستی به صفحه ی روت پروژه رسید، اون درخواستو ریدایرکت میکنیم به یک پوشه بالاتر. همچنین خود اون پوشه ی بالاتر هم باز یک فایل htaccess نیاز داره برای ریدایرکت کردن درخواست ها به index.php.

توضیحات بیشتری نیاز داره ولی کلیت به این شکله از طریق وب سرور ازین راه ها میشه استفاده کرد.

اینا نظرات من بود. ممکنه راه های دیگه ایم باشه!

فایل پیوست

محسن موحد

توسط

محسن موحد

17 اردیبهشت 99