PDA

View Full Version : سوال: امنیت پوشه هایی که با htaccess غیرقابل دسترسی شدن در چه حدی هست؟



idocsidocs
یک شنبه 05 تیر 1390, 13:37 عصر
همونطور که می دونید می تونیم با استفاده از htaccess دسترسی به پوشه ها رو غیر مجاز کنیم و از دسترسی بازدیدکننده ها به محتویات داخل پوشه جلوگیری کنیم.

با توجه به اینکه این محدودیت شامل اسکریپتهای PHP نمی شه و این اسکریپتها می تونن به محتویات داخل پوشه دسترسی داشته باشن، آیا می شه به این روش اعتماد کرد؟

آیا توی سرورهای اشتراکی، مدیران سایر وب سایتها که از همون سرور استفاده می کنن، می تونن یه اسکریپت پی اچ پی بنویسن و به محتویات پوشه هایی که دسترسی بهشون رو غیرمجاز کردیم دسترسی پیدا کنن؟

لطفا توضیح بدید.

رضا قربانی
یک شنبه 05 تیر 1390, 14:57 عصر
Htaccess. یک فایل پیکر بندی برای وب سایت هایی است که از سرور آپاچی استفاده می کنند. وقتی این فایل در یکی از پوشه های وب سایت قرار می گیرد، وب سرور آپاچی بررسی می کند که چه دستوراتی در این فایل وجود دارد و بعد طبق این دستورات، آن قسمت از سایت که htaccess در آن قرار دارد را پیکر بندی می کند.

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

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

و در آخر بهتون بگم که با php و ترکیب با زبان های دیگه هر کاری رو می شه کرد . نشد نداره

idocsidocs
یک شنبه 05 تیر 1390, 15:51 عصر
Htaccess. یک فایل پیکر بندی برای وب سایت هایی است که از سرور آپاچی استفاده می کنند. وقتی این فایل در یکی از پوشه های وب سایت قرار می گیرد، وب سرور آپاچی بررسی می کند که چه دستوراتی در این فایل وجود دارد و بعد طبق این دستورات، آن قسمت از سایت که htaccess در آن قرار دارد را پیکر بندی می کند.

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

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

و در آخر بهتون بگم که با php و ترکیب با زبان های دیگه هر کاری رو می شه کرد . نشد نداره
مطالبی که می گید درسته. ولی فرض کنید که یکی از مشتریهاتون که سرور اشتراکی داره، می خواد فایل های مهم خودش رو از دسترس بازدیدکننده ها و مدیران سایر وب سایتها خارج کنه. شما چیکار می کنید؟

ایا به امنیتی که htaccess ایجاد می کنه اعتماد می کنید؟

eshpilen
یک شنبه 05 تیر 1390, 17:15 عصر
بستگی به نوع فایل و سناریوی دسترسی داره. مثلا فایل خصوصی هست یا در دسترس عده ای؟
اگر مشکلی ایجاد نکنه، میشه فایل رو بصورت رمز شده روی سرور نگهداری کرد (مثلا رمز شده با AES256). در اینصورت موقع دسترسی از طریق وب، یک پسورد هم وارد میشه که این پسورد میتونه فایل رو از رمز خارج بکنه. یا میشه کلا فایل رو بصورت رمزشده آپلود و دانلود کرد که در اینصورت امنیت بالاتر میره.
یه راه دیگه هم ذخیره در دیتابیس هست. البته حتی امنیت ذخیره در دیتابیس رو هم میشه با رمزنگاری بالاتر برد. یعنی این دو روش رو میشه با هم ترکیب کرد.
اما بعضی وقتا استفاده از رمزنگاری ممکن نیست یا به دردسرش نمی ارزه.
میشه فایل رو روی کلاینت رمز کرد و به سرور منتقل کرد. و میشه روی سرور فایل رو بعد از آپلود رمز کرد. اینا با هم تفاوت دارن. چون در حالتی که فایل قبل از آپلود رمز بشه کسی در سمت سرور به هیچ وجه نمیتونه به پسورد دسترسی پیدا کنه. اگر این روش مطلوب باشه میشه یک برنامهء مخصوص دسکتاپ برای این کار طراحی کرد.
البته شما میتونید پسورد رو در همون فرمی که فایل رو آپلود میکنید بگیرید، اما امنیت این روش 100% نیست چون اگر کسی بتونه سورس فایلهای شما رو دستکاری بکنه میتونه پسورد رو هم سرقت بکنه؛ ولی بهرحال امنیت این روش فکر میکنم برای بیشتر کاربردها کافی باشه. حداقل خیلی بیشتر از بقیهء روشها هست.

بنابراین کلا به میزان حساسیت اطلاعات و محدودیت های اینترفیس/کاربران در روش استفادهء اونا برمیگرده که ما از چه روشی استفاده کنیم.

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

idocsidocs
دوشنبه 06 تیر 1390, 01:04 صبح
بستگی به نوع فایل و سناریوی دسترسی داره. مثلا فایل خصوصی هست یا در دسترس عده ای؟
اگر مشکلی ایجاد نکنه، میشه فایل رو بصورت رمز شده روی سرور نگهداری کرد (مثلا رمز شده با AES256). در اینصورت موقع دسترسی از طریق وب، یک پسورد هم وارد میشه که این پسورد میتونه فایل رو از رمز خارج بکنه. یا میشه کلا فایل رو بصورت رمزشده آپلود و دانلود کرد که در اینصورت امنیت بالاتر میره.
یه راه دیگه هم ذخیره در دیتابیس هست. البته حتی امنیت ذخیره در دیتابیس رو هم میشه با رمزنگاری بالاتر برد. یعنی این دو روش رو میشه با هم ترکیب کرد.
اما بعضی وقتا استفاده از رمزنگاری ممکن نیست یا به دردسرش نمی ارزه.
میشه فایل رو روی کلاینت رمز کرد و به سرور منتقل کرد. و میشه روی سرور فایل رو بعد از آپلود رمز کرد. اینا با هم تفاوت دارن. چون در حالتی که فایل قبل از آپلود رمز بشه کسی در سمت سرور به هیچ وجه نمیتونه به پسورد دسترسی پیدا کنه. اگر این روش مطلوب باشه میشه یک برنامهء مخصوص دسکتاپ برای این کار طراحی کرد.
البته شما میتونید پسورد رو در همون فرمی که فایل رو آپلود میکنید بگیرید، اما امنیت این روش 100% نیست چون اگر کسی بتونه سورس فایلهای شما رو دستکاری بکنه میتونه پسورد رو هم سرقت بکنه؛ ولی بهرحال امنیت این روش فکر میکنم برای بیشتر کاربردها کافی باشه. حداقل خیلی بیشتر از بقیهء روشها هست.

بنابراین کلا به میزان حساسیت اطلاعات و محدودیت های اینترفیس/کاربران در روش استفادهء اونا برمیگرده که ما از چه روشی استفاده کنیم.

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

فرض کنید توی پوشه عمومی که همه بازدیدکننده ها می تونن به فایلها دسترسی داشته باشن، یه پوشه رو با htaccess غیرقابل دسترس کردیم. در این حالت فقط اسکریپتها پی اچ پی می تونن به فایلهای دسترسی داشته باشن.

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

eshpilen
دوشنبه 06 تیر 1390, 18:42 عصر
قاعدتا نباید بتونن.
اما من میگم برای فایلهای خیلی مهم نباید روی اینها اتکا کرد بخاطر اینکه بعضی وقتا پیکربندی سرور ممکنه درست نبوده باشه و هزار و یک سوراخ دیگه.
یا اینکه یکی سرور رو هک میکنه و فایلهای شما رو کش میره.
یا حتی ادمین سرور خودش ممکنه فایلها رو کش بره (بالاخره از هر ده نفر شاید یک نفر آدم بدی باشه!!).

idocsidocs
دوشنبه 06 تیر 1390, 22:37 عصر
قاعدتا نباید بتونن.
اما من میگم برای فایلهای خیلی مهم نباید روی اینها اتکا کرد بخاطر اینکه بعضی وقتا پیکربندی سرور ممکنه درست نبوده باشه و هزار و یک سوراخ دیگه.
یا اینکه یکی سرور رو هک میکنه و فایلهای شما رو کش میره.
یا حتی ادمین سرور خودش ممکنه فایلها رو کش بره (بالاخره از هر ده نفر شاید یک نفر آدم بدی باشه!!).
خب وقتیکه هر دو اسکریپت تحت یه سرور هستن و از یک هارد برای ذخیره فایلها استفاده می کنن، کاربر یه سایت دیگه می تونه یه اسکریپت بنویسه و با وارد کردن آدرس درایو و پوشه ای که فایلهای من توش ذخیره شدن، فایلهای من رو بدست بیاره.

نظر شما چیه؟

eshpilen
سه شنبه 07 تیر 1390, 19:44 عصر
منظورت اسکریپت PHP هست؟
اسکریپت های PHP رو میشه با تنظیم open_base_dir در PHP محدود کرد که هرکاربر فقط به دایرکتوریهای خاص خودش دسترسی داشته باشه.
البته من جزییاتش رو نمیدونم که چطوری این کار رو میکنن، ولی روی هاست تست کردم و دیدم.

البته راههای دیگری برای دسترسی غیرمجاز ممکنه وجود داشته باشه. چند سناریوی مختلف هست.
بطور مثال اگر سرور از mod_php استفاده بکنه و امکان استفاده از cgi-bin وجود داشته باشه (دقت کنید cgi-bin خودش یک سیستم جدا هست و ربط مستقیمی به PHP نداره) و تنظیم پرمیشن دایرکتوری تمپ مخصوص شما درست انجام نشده باشه، میشه بصورت غیرمجاز بهش دسترسی پیدا کرد. چون در این حالت ما از PHP برای دسترسی استفاده نمیکنیم و نتیجتا تحت محدودیت open_base_dir قرار نمیگیریم. البته این دسترسی از طریق تابع system در PHP هم امکان پذیره (اینم یه روش مشابه دور زدن محدودیت های open_base_dir در PHP هست - عملا مشابه روش قبلی). بنابراین یا پرمیشن باید درست و آگاهانه تنظیم شده باشه یا هردوی cgi-bin و تابع system بسته شده باشن.

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

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

idocsidocs
سه شنبه 07 تیر 1390, 20:54 عصر
منظورت اسکریپت PHP هست؟
اسکریپت های PHP رو میشه با تنظیم open_base_dir در PHP محدود کرد که هرکاربر فقط به دایرکتوریهای خاص خودش دسترسی داشته باشه.
البته من جزییاتش رو نمیدونم که چطوری این کار رو میکنن، ولی روی هاست تست کردم و دیدم.

البته راههای دیگری برای دسترسی غیرمجاز ممکنه وجود داشته باشه. چند سناریوی مختلف هست.
بطور مثال اگر سرور از mod_php استفاده بکنه و امکان استفاده از cgi-bin وجود داشته باشه (دقت کنید cgi-bin خودش یک سیستم جدا هست و ربط مستقیمی به PHP نداره) و تنظیم پرمیشن دایرکتوری تمپ مخصوص شما درست انجام نشده باشه، میشه بصورت غیرمجاز بهش دسترسی پیدا کرد. چون در این حالت ما از PHP برای دسترسی استفاده نمیکنیم و نتیجتا تحت محدودیت open_base_dir قرار نمیگیریم. البته این دسترسی از طریق تابع system در PHP هم امکان پذیره (اینم یه روش مشابه دور زدن محدودیت های open_base_dir در PHP هست - عملا مشابه روش قبلی). بنابراین یا پرمیشن باید درست و آگاهانه تنظیم شده باشه یا هردوی cgi-bin و تابع system بسته شده باشن.

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

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

اگر سرور از mod_php استفاده بکنه و امکان استفاده از cgi-bin وجود داشته باشه، پرومیشن های پوشه تمپ چطور باید تنظیم بشن تا جلوی دسترسی رو بگیره؟ باید 644 باشه یا 640 یا ... ؟

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

eshpilen
سه شنبه 07 تیر 1390, 21:36 عصر
اگر سرور از mod_php استفاده بکنه و امکان استفاده از cgi-bin وجود داشته باشه، پرومیشن های پوشه تمپ چطور باید تنظیم بشن تا جلوی دسترسی رو بگیره؟ باید 644 باشه یا 640 یا ... ؟

بنظر بنده باید این کار رو بکنیم:
اول Owner اون پوشه رو به کاربری که آپاچی تحت اون اجرا میشه (بعضی وقتا کاربری بنام apache و در بعضی سرورها آیدی های دیگری داره) تعیین کنیم.
بعد باید پرمیشن 700 بهش بدیم؛ یا 750. مهم عدد اول و آخر هست. چون عدد اول دسترسی Owner یا مالک پوشه هست که ما باید دسترسی کامل (7) رو که شامل خواندن، نوشتن و اجرا میشه (قبلا گفتم چرا دسترسی اجرا برای دایرکتوریها لازم هست) بهش بدیم تا آپاچی بتونه با/در اون پوشه همه کاری بکنه. عدد دوم هم دسترسی برای اعضای گروه است که تاجاییکه دیدم معمولا دسترسی 5 برای دایرکتوری ها بهش داده میشه و برای فایلها دسترسی 4. یعنی فقط دسترسی نوشتن رو به اعضای گروه نمیدن. این درمورد دایرکتوریها به این معنی هست که اعضای گروه نمیتونن در اون دایرکتوری فایلی ایجاد بکنن یا فایلی رو حذف یا به جای دیگری منتقل کنن یا اسم فایل رو عوض کنن، و درمورد فایلها به این معنی هست که نمیتونن محتویات فایل رو تغییر بدن.

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

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


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

اما نمیدونم آیا میشه باوجود mod_php دسترسی رو برای پوشهء خانگی و تمام محتویاتش هم درست تنظیم کرد یا نه. چون ظاهرا نرم افزار کنترل پنل تحت کاربر اکانت شما اجرا میشه. بنابراین اگر Owner فایلهای ما آپاچی باشه، کاربری که کنترل پنل تحت اون اجرا میشه چطور میتونه به اون فایلها برای مدیریت دسترسی کافی داشته باشه؟ چطور فایلی رو حذف میکنه؟ چطور فایلی رو ویرایش میکنه؟ چطور دایرکتوری جدیدی ایجاد میکنه؟ ... مگر اینکه یه روش دیگری بکار ببریم و شاید باید اون کاربر رو در گروه فایلها و دایرکتوری های خودمون قرار بدیم و دسترسی گروه رو هم 7 تعیین کنیم. ولی بنده بهرصورت موفق نشدم بجز هاست خودم سرور دیگری رو که از mod_php استفاده میکنه بررسی کنم تا ببینم از چه روشی استفاده کردن. شاید از این روشی که بنده گفتم استفاده کردن و عملی هست و شاید هم دسترسی cgi-bin و system رو بسته باشن.
اگر کسی هاستی داشت که از mod_php استفاده میکنه لطفا بهم دسترسی موقت بده تا این مسئله رو روش بررسی کنم. تازه بهش میگم میشه سایت های روش رو هک کرد یا نه :لبخند:
قبلا چند نفر از کاربران دسترسی موقت به هاستهای خودشون رو دادن، ولی هیچکدام از نوع mod_php نبودن.