PDA

View Full Version : مشکلات امنیتی



Tarragon
شنبه 25 آذر 1391, 16:26 عصر
سلام
توی یه اسکریپت دیدم نوشته باگ های csrf , sql injection ,session hijack, brute force , remote file include , XSS رو فیکس کرده
می خواستم بدونم این ها چین؟
چطوری کار می کنن؟
و چطوری می شه فیکسشون کرد؟
پیشاپیش تشکر می کنم.

siavashsay
شنبه 25 آذر 1391, 16:57 عصر
دوست عزیز !
این کتاب رو که نوشته جناب استخریان هست دانلود کنید ! توضیح داده شده :)
دانلود کتاب (http://dlbook.net/?p=6671)
و اینکه متونید به وبلاگ ایشون هم یه سری بزنید
وبلاگ جناب استخریان (http://estakhrian.blogfa.com)
همچنین میتونید باز هم تو همین فروم جستجو کنید و اطلاعات کاملی رو بدست بیارید ! اتفاقا بنده هم در حال آموزش این سیستم هستم و الان که میبینم واقعا خیلی جالب و غیر قابل باور هست !
پس سعی کنید این آموزش ها رو حتما یاد بگیرید !

و اینکه گفته بود چطور بشه جلوگیری کرد ! توی همون کتاب و لینک ها آموزش هست !
اما باز هم برنامه ACUTNETIX رو دانلود و اجرا کنید چون بسیار مفید هست ! این برنامه تمامی باگ های یک سایت رو نشون میده و شما میتونید ازون به عنوان تست کردن سایت خودتون استفاده کنید !
برای دانلود این برنامه باید ورژن کرک شده اون رو دانلود کنید ! با یه سرچ توی گوگل میتونید آموزش و نصب اون رو پیدا کنید :)

Tarragon
شنبه 25 آذر 1391, 18:06 عصر
سلام
HTML form without CSRF protection یعنی چی؟
تو همین برنامه با اسکن کردن اسکریپتم این الرت رو داد و آدرس 3 تا فایل رو نوشت.
چطوری باید فیکس شه؟

siavashsay
شنبه 25 آذر 1391, 18:43 عصر
این مبحث توی همون کتابها توضیح داده شده !
اتفاقا منم الان رو همین موضوع دارم کار میکنم !
قضیه اینه که شما باید بر روی هر فرمی که اطلاعات مهمی رو داره میگیره مثل ( لاگین - ثبت نام - بروز کردن اطلاعات - تراکنش مالی ) و یا هر فرم دیگه که اطلاعات مهمی رو داره میگیره یک شناسه قرار بدی که اون شناسه باعث بشه نفوذگر نتونه متغیرهای POST - GEt رو به سیستم شما بفرسته و اونها رو از طرف خودش ارسال و ثبت کنه !
اگر بخوام اجمالی توضیح بدم یه جورایی مثل CAPTCHA کد هست !
ببینید معمولا توی همه فرمها اطلاعات شما یا همون متغیرها معلوم هستند و میشه اسم اونها رو پیدا کرد و مقدار دهی کرد !
مثلا Username - Password نام فیلدهاش رو خیلی راحت میشه با View Source اون فایل پیدا کرد و مقدار دهی کرد و به فرم شما ارسال کرد !
قضیه CSRF اینه که شما طوری فرم رو طراحی کنید که با یه مشخصه که هر بار عوض میشه ( random ) ارسال شه که مطمئن شید اون فرم توسط کاربر و از سایت خودتون داره ارسال میشه !
برای این کار باید یک فیلد مخفی Hidden Field رو در فرمتون قرار بدید و یک Session هم بگذارید که هر 2 تای اونها باید یک مقدار رو داشته باشن !
مقدار اونها هم باید یک کاراکتر Random باشه ! دقیقا مثل Captcha !
بعد موفعی که فرم داره Submit میشه اول مقدار اون فیلد مخفی با اون سشن رو مقایسه کنید که آیا این 2 تا برابر هستند یا نه ! اگر بودند فرم لاگین یا ثبت نام ارسال شه و اگر نه خطا بده !
-------
البته میدونم چیز خاصی دستگیرتون نشد :)) بنده خودم 1 هفته زمان برد تا متوجه شدم !
اما اگر داخل همون کتابهایی که دادم CSRF رو مطالعه کنید متوجه میشید :)
باز هم اگه کمک خواستید بنده در خدمتم !

Tarragon
شنبه 25 آذر 1391, 20:35 عصر
فکر کنم یعنی اینکه توی یه input مخفی یه رشته عبارت random بزارم و اونو تو سشن ذخیره کنم بعد زمان اینکه فرم دریافت کردم ببینم درست هست یانه ؟
درست فهمیدم؟

siavashsay
شنبه 25 آذر 1391, 20:44 عصر
دقیقا همینه

Tarragon
یک شنبه 26 آذر 1391, 16:53 عصر
ممنون کتاب ها خوب بودن آموزش هم کامل بود اما ممنون می شم یه دوست توضیحات کاملی درباره شکاف های امنیتی بالا بطور خلاصه بدن و راه حلش رو بگن تشکر.

siavashsay
یک شنبه 26 آذر 1391, 17:36 عصر
دوست عزیز !
تو همین فروم اگر جستجو کنید تاپیک مربوطه رو پیدا میکنید ! اینها یک سری لینک همین فروم هستند ! چک کنید
Sql Injection (http://barnamenevis.org/showthread.php?283168-%D9%86%D8%AD%D9%88%D9%87-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-SQL-Injection&highlight=%D8%AD%D9%85%D9%84%D8%A7%D8%AA+php)
کنترل ورودی ها Injection (http://barnamenevis.org/showthread.php?358181-%DA%A9%D9%86%D8%AA%D8%B1%D9%84-%D9%88%D8%B1%D9%88%D8%AF%DB%8C-%D9%88-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-injection&highlight=%D8%AD%D9%85%D9%84%D8%A7%D8%AA+php)
مقابله با XSS (http://barnamenevis.org/showthread.php?305235-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AC%D9%84%D9%88%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%AA%D8%B2%D8%B1%DB%8C%D9%82-%DA%A9%D8%AF%D9%87%D8%A7%DB%8C-XSS-%D8%A8%D9%87-%D8%A2%D8%AF%D8%B1%D8%B3-%D8%B3%D8%A7%DB%8C%D8%AA-%D9%87%D8%A7%DB%8C%DB%8C-%DA%A9%D9%87-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D9%85%DB%8C-%DA%A9%D9%86%DB%8C%D9%85.&highlight=%D8%AD%D9%85%D9%84%D8%A7%D8%AA+php)
10 راه نفوذ به سایت (http://barnamenevis.org/showthread.php?82136-%D8%AF%D9%87-%D8%AF%D9%84%DB%8C%D9%84-%D8%A7%D8%B5%D9%84%DB%8C-%D9%87%DA%A9-%D8%B4%D8%AF%D9%86-%D8%B3%D8%A7%DB%8C%D8%AA%D9%87%D8%A7&highlight=%D8%AD%D9%85%D9%84%D8%A7%D8%AA+php)
باز هم خودتون یه جستجو داشته باشید ممنون میشم !
اگر هم کمک خاصی نیاز بود در خدمتم :)

pani.khoram
یک شنبه 26 آذر 1391, 19:05 عصر
سلام بحث امنیت بحثی نیست که خیلی راحت بشه تو یه پارگراف در موردش صحبت کرد ، ولی خیلی از کد دستور هایی که در تمام زبان های برنامه نویسی وجود دارند ، با اینکه خروجی صحیح رو به شما نشان می دهند ولی همیشه امن و غیر قابل نفوذ نیستند . به طور مثال شما اگه یک پارامتر را به صورت مستقیم وارد دستور QUERY SQL کنید ، خیلی راحت شاید یه نفر پیدا بشه و با چند تکنیک ساده کل اطلاعات دیتابیس رو داغون کنه ، حالا مثال زیر رو نگاه کنید

delete from user where id = $id_num

متغییری که فقط باید عدد بگیرد به این شکل در نظر بگیرید :
$id_num = 1;delete from user;
با این ورودی شما خیلی راحت دارید اجازه می دید هر کسی به هر شکلی injection به شما بزنه
حالا راه حل ها ، برای برطرف شدن کامل sql injection :

استفاده از این دستور ها الزامیست
mysql_real_escape_string
int($id_num) اگر ورودی همیشه عدد است پس حتما به عدد ان رو cast کنید
و در اخر استفاده کردن از تابع = stripslashes

اولین بر اساس query های استاندارد اجازه نمی ده که کاربر بتونه شرط های همیشه ثابت در سیستم وارد کنه
دومی برای وقتی استفاده می شه که فقط مقدار ورودی عدد است
در آخر هم در صورتی که کاربر slash در سیستم زده باشد برای رد کردن mysql_real_escape_string مخصوصا در نسخه های php قدیمی تر ، آن ها را از سیستم حذف می کند
اصولا بحث امنیت ، خیلی پیچیده نیست ولی درست استفاده کردن از کد ها نه به شکل خیلی راحت آن بلکه استاندارد نویسی ، شما را به موفقیت و داشتن سیستمی امن نزدیک می کنه
البته هیچ کسی نمی تونه ادعا کنه ، که سیستم غیر قابل نفوذ داره ولی می شه درب خونه رو به جایه قفل ساده ، قفل کتابی و لولای فلزی امن تر کرد

موفق باشی