PDA

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



payamsp
پنج شنبه 20 فروردین 1388, 15:09 عصر
می خواستم در مورد Cross-Site Request Forgeries و نحوه مقابله با اون بدونم.
ممنون

امیـرحسین
پنج شنبه 20 فروردین 1388, 15:51 عصر
این نوع حمله میشه گفت دسترسی غیرمنتظره کاربر به سیستم هست. شما مسیرهایی برای دریافت اطلاعات از کاربر تعیین می کنید یا مسیرهایی برای دسترسی خودتون ولی یه کاربر میاد از حفره های احتمالی وارد اسکریپت ها و سیستم میشه.
نمونه، فرض کنید توی این فروم، هرکس فقط میتونه صفحه پروفایل خودش رو ببینه. مثلا ID شما 97886 هست و آدرس پروفایلتون هم:

http://barnamenevis.org/forum/member.php?u=97886
شما لاگین می کنید و این آدرس رو برای صفحه پروفایل خودتون مشاهده می کنید.
حالا فرض کنید که شما ID من رو پیدا کردید. آیا این فکر به نظرتون نمیرسه که URL بالا رو با ID من چک کنید؟ تو این حالت اگر سازندگان، این موضوع رو پیش بینی نکرده باشند شما پروفایل من رو مشاهده کردید. دیدن پروفایل مثال هست، چنین صفحه ای می تونه تو یه سایت حاوی اطلاعات مهم باشه.
راه

نمونه دیگه اطمینان به متغیرهای POST هست. بعضی از برنامه نویس ها تصور می کنند چون کاربر نمی تونه متغیر POST به صفحه ارسال کنه پس این متغیرها امن هستند در حالیکه یه برنامه نویس دیگه می تونه این کار رو از یه اسکریپت خارجی توی سایت خودش انجام بده (از وقتی cUrl اومده این کار رو تو 4 خط میشه انجام داد)

نمونه دیگه، امکان include از سرورهای خارجی هست که مثلا من بتونم توی یه فایل PHP در سایتم، یه فایل از سایت شما رو include کنم. این امکان در PHP بصورت پیش فرض غیرفعاله ولی وقتی فعال شه خیلی خطرناک میشه.

و کلی نمونه های دیگه....

راه مقابله اش، دونستن و پیشگیری ازشونه!

guy18iran
پنج شنبه 20 فروردین 1388, 15:56 عصر
خوب این نوح حمله به نظر من نوع خفته به حساب میاد.
این طوری براتون توضیح میدم که این حمه به صورتی هست که مثلا یه نفر میاد تو یه سایتی مثل همین انجمن یک عکس قرار میده که آدرس عکس به یک سایت دیگه مربوط میشه. درواقع اطلاعات رو به اون سایت میفرسته.
این نوع حمله می تونه از اطلاعات قربانی یعنی کسی که داره از سایت بازدید میکنه استفاده کنه.
فکر کنین شما توی یاهو میل هستین و یاهو هم توی مرورگر شما اطلاعات رو به صورت cookie ذخیره کرده. این حمله میاد از اطلاعات کوکی استفاده میکه و بدون ین شما خبر داشته باشیه اطلاعاتتون رو می دزده.
البته این کار بیشتر برای دزدین اطلاعات حساب بانکی و خیلی مهمتر استفاده میشه.
اطلاعات کامل تر و توضیحات تکمیلی از سایت محبوب ویکی پیدیا پیدا میشه. اینم لینکش:
http://en.wikipedia.org/wiki/Cross-site_request_forgery
برای مقابله با اون باید این کارها رو انجام بدین:
- زمان نگهداری کوکی ها رو محدود کنین.
- هدر URL ارجاع دهنده رو چک کنین.
- برای تایید کاربران فقط از کوکی استفاده نکنین. از GET و POST کمک بگیرین.
همه اطلاعات مربوطه توی همون لینک که بالا گذاشتم هست. :چشمک:

payamsp
پنج شنبه 20 فروردین 1388, 21:10 عصر
توی این جمله

برای تایید کاربران فقط از کوکی استفاده نکنین. از GET و POST کمک بگیرین.
منظورتون رو متوجه نمیشم میشه بیشتر توضیح بدید .

guy18iran
جمعه 21 فروردین 1388, 21:29 عصر
والله Get رو خودمم نمی دونم.
ولی POST اینطوری هست که یه فرم درست کنین و یه فیلد hidden بذارین که مقدارش رو هم طوری بذارین که اطلاعاتش با هر لود صفحه توی DB تایید شه و در واقع از دوت قسمت کاربر تایید شه، نه فقط از طرف کوکی. :چشمک:

payamsp
شنبه 22 فروردین 1388, 09:47 صبح
من که متوجه نشدم
اگه کسی در این باره اطلاعی داره لطفا یه توضیح کامل بده

امیـرحسین
شنبه 22 فروردین 1388, 19:05 عصر
لینکی که guy18iran معرفی کردند(اینجا (http://en.wikipedia.org/wiki/Cross-site_request_forgery)) اطلاعات کاملی داره و جمله این دوستمون هم ترجمه بخشی از همین مطلب هست.
پیشنهاد می کنم مطلب رو بخونید تا منظور عباراتش رو بهتر متوجه بشید (البته من زیاد موفق نبودم! :چشمک:)


توی این جمله
نقل قول:
برای تایید کاربران فقط از کوکی استفاده نکنین. از GET و POST کمک بگیرین.
منظورتون رو متوجه نمیشم میشه بیشتر توضیح بدید .
مخلص کلامش اینه که کوکی ها مطمئن نیستند! :لبخند:

hosseintdk775
شنبه 22 فروردین 1388, 20:25 عصر
من که متوجه نشدم
اگه کسی در این باره اطلاعی داره لطفا یه توضیح کامل بده

بسم الله الرحمن الرحیم
سلام
باید اینگونه باشد:
می گه که:
"وقتی اطلاعاتی از طریق post و یا get دریافت می کنید / هویت آنها رو هم چک کنید و سپس عملیات مورد نظر رو انجام دهید و فقط به کوکی که کاربر ارسال می کنه متکی نباشید."

narsic
یک شنبه 23 فروردین 1388, 15:02 عصر
با سلام
شما میتونید با متغیر GEt هم مقداری از امنیت رو تامین کنید همونطور که دوستمون گفت برای اینکار میتونید از این راه استفاده کنید .
در مقدار GET یه کلمه هش شده به همراه نام کاربری هر کاربر رو اضافه کنید که من پیشنهاد میکنم این کلمه اضافه یک عدد اتفاقی باشد که در بانک ذخیره میشه و در هر بار تغییر صفحه و یا ورود کاربر به سایت این مقدار تغییر کنه سپس این مقدار به بانک و به تمام لینکهای موجود در صفحه اضافه بشه و در صورتی که کاربر به صفحه جدیدی رفت این مقدار با مقدار موجود در بانک بررسی بشه در صورت صحت کار انجام بشه و در غیر اینصورت خطا بدید که البته باید از این مقدار به همراه چیزهای دیگر استفاده کنید مانند Coockie و ... .
موفق باشید

Abalfazl
سه شنبه 25 فروردین 1388, 00:05 صبح
تشریح حملات CSRF و XSS ، نحوه مقابله با این حملات در PHP

http://amir87.persiangig.com/document/XSS%20CSRF.pdf

http://estakhrian.blogfa.com/

amirhosein
چهارشنبه 26 فروردین 1388, 11:06 صبح
می تونید برای کسب اطلاعات در مورد امنیت توی پی اچ پی از این آموزش فارسی استفاده کنید:
http://www.bashiry.ir/Download/Attack_and_Defence_PHP_Web_Apps(www.bashiry.ir).ra r (http://www.bashiry.ir/Download/Attack_and_Defence_PHP_Web_Apps%28www.bashiry.ir%2 9.rar)
لینک کمکی
http://rapidshare.com/files/88761968/Attack_and_Defence_PHP_Web_Apps.zip.html

yaqubian
چهارشنبه 26 فروردین 1388, 18:42 عصر
دوست عزیز
اگه بتونید این کتاب رو گیر بیارید securing php web applications کتاب بسیار خوبی هستش.
موفق باشید

امیـرحسین
چهارشنبه 26 فروردین 1388, 19:36 عصر
این هم برای خودش منبعی هست: PHP Manual : Security (http://ir.php.net/manual/en/security.php)


همانا PHP.net خانه سوم ماست (دومیش مدرسه است)