PDA

View Full Version : سوال: درخواست راهنمایی امنیتی



farnaz.saeedi
پنج شنبه 27 بهمن 1390, 13:45 عصر
سلام
یکنفر محتویات ستون پسورد یه تیبل منو بیرون کشیده.میخوام ببینم از کدوم روش حمله استفاده کرده که تونسته اینکارو بکنه.روشهای جلوگیریش هم بگید ممنون میشم
تشکر

farnaz.saeedi
پنج شنبه 27 بهمن 1390, 16:20 عصر
لطفا راهنمایی کنید

MMSHFE
پنج شنبه 27 بهمن 1390, 16:32 عصر
آخه این سؤال شما مثل اینه که بگین خونه منو دزد زده. میشه بگین از کدوم راه اومده؟ دوست گرامی، باید کدتون رو ببینیم تا متوجه بشیم کجاها قابل نفوذ بوده، همچنین خودتون باید فایلهای Log سرور رو بررسی کنید. شاید مشکلی توی طراحی بوده که باعث شده خود اسکریپتتون رمز رو تقدیم هکر محترم کنه.
موفق باشید.

farnaz.saeedi
پنج شنبه 27 بهمن 1390, 17:36 عصر
آخه این سؤال شما مثل اینه که بگین خونه منو دزد زده. میشه بگین از کدوم راه اومده؟ دوست گرامی، باید کدتون رو ببینیم تا متوجه بشیم کجاها قابل نفوذ بوده، همچنین خودتون باید فایلهای Log سرور رو بررسی کنید. شاید مشکلی توی طراحی بوده که باعث شده خود اسکریپتتون رمز رو تقدیم هکر محترم کنه.
موفق باشید.
من حدس میزنم Sql injection باشه.کدوم قسمت از کد رو بزارم که بررسی کنید؟

yones_safari
پنج شنبه 27 بهمن 1390, 17:37 عصر
کدهایی که از کاربر ورودی میگیری.

farnaz.saeedi
پنج شنبه 27 بهمن 1390, 19:53 عصر
کدهایی که از کاربر ورودی میگیری.
خیلی جاها این کارو میکنم,ورود,ثبت نام,فرم ارتباط با ما....
نمیشه همه این کدهارو اینجا گذاشت که.
برای مقابله با sql injection روشهایی که باید استفاده بشه رو بگید.
من آدرسهایی به این شکل دارم:
http://www.mysite.com/news.php?id=13
میتونه با تغییر تو آدرس به جداول دسترسی پیدا کرده باشه؟
در حالی که مقدار id رو با تابع mysql_real_escape_string چک میکنم.
تشکر

MMSHFE
پنج شنبه 27 بهمن 1390, 22:19 عصر
پیشنهاد میکنم این کد رو بکار ببرین:


$id = isset($_GET['id'] && is_numeric($_GET['id']) ? (int) $_GET['id]' : 0;
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$id = mysql_real_escape_string($id);

دقت کنید که چطور از تبدیل نوع برای اطمینان از عددی بودن id استفاده شده. استفاده از تابع Escape به تنهایی در خیلی جاها کافی نیست. بعلاوه، حملات فقط شامل SQL Injection نمیشه. ممکنه با Session Fixation یا XSS و یا حتی Javascript Injection سایتتون مورد حمله قرار گرفته باشه. باید سایتتون درمقابل اینگونه حملات هم امنیت کافی رو داشته باشه.
موفق باشید.

farnaz.saeedi
پنج شنبه 27 بهمن 1390, 22:55 عصر
پیشنهاد میکنم این کد رو بکار ببرین:


$id = isset($_GET['id'] && is_numeric($_GET['id']) ? (int) $_GET['id]' : 0;
mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
mysql_query('SET NAMES \'utf8\'');
$id = mysql_real_escape_string($id);

دقت کنید که چطور از تبدیل نوع برای اطمینان از عددی بودن id استفاده شده. استفاده از تابع Escape به تنهایی در خیلی جاها کافی نیست. بعلاوه، حملات فقط شامل SQL Injection نمیشه. ممکنه با Session Fixation یا XSS و یا حتی Javascript Injection سایتتون مورد حمله قرار گرفته باشه. باید سایتتون درمقابل اینگونه حملات هم امنیت کافی رو داشته باشه.
موفق باشید.
سلام
از این کد استفاده کنم جلوی این حملاتی که گفتید رو میگیره؟این کد فقط برای ارسال مقادیر به صفحات دیگه است.یا برای لاگین و تماس با ما هم میتونم استفاده کنم

MMSHFE
پنج شنبه 27 بهمن 1390, 23:33 عصر
کدی که گذاشتم فقط برای SQL Injection هست. برای سایر موارد باید تکنیکهای مختلفی مثل چک کردن Referer و... رو بکار ببرین. برای اطلاعات بیشتر درباره این روشهای نفوذ، پیشنهاد میکنم توی اینترنت جستجو کنید.

farnaz.saeedi
شنبه 29 بهمن 1390, 20:42 عصر
اگه کاربر با sql injection به جداول بانک دسترسی پیدا کنه میتونه مقادیر داخل جدول و عوض کنه یا جدول و پاک کنه؟یا فقط میتونه جدول و بخونه؟

yones_safari
شنبه 29 بهمن 1390, 21:59 عصر
عزیزم شما فرض کن طرف نام کاربری ادمین رو میدونه و پسورد رو با sqli دور بزنه!!!!!حالا هر کاری میتونه بکنه.
موفق باشید.

numberone1
شنبه 29 بهمن 1390, 22:07 عصر
کدی که گذاشتم فقط برای SQL Injection هست. برای سایر موارد باید تکنیکهای مختلفی مثل چک کردن Referer و... رو بکار ببرین. برای اطلاعات بیشتر درباره این روشهای نفوذ، پیشنهاد میکنم توی اینترنت جستجو کنید.
ميشه راجب چك كردن مقدار reffer و Javascript Injection يكم توضيح بدي؟
منظور از Javascript Injection همون نوشتن كدهاي Javascript از طريق فرم هاي ورودي هست؟ اگر اينه كه جلوش و بستم
ولي راجب reffer يكم توضيح بدين

masoud_tamizy
یک شنبه 30 بهمن 1390, 07:41 صبح
اگه کاربر با sql injection به جداول بانک دسترسی پیدا کنه میتونه مقادیر داخل جدول و عوض کنه یا جدول و پاک کنه؟یا فقط میتونه جدول و بخونه؟

بستگی این داره که اولا به یورزتون چه مجوزهایی رو داده باشین و اینکه سبک نوشتن کوئری چجوری باشه :لبخندساده:

farnaz.saeedi
یک شنبه 30 بهمن 1390, 09:50 صبح
عزیزم شما فرض کن طرف نام کاربری ادمین رو میدونه و پسورد رو با sqli دور بزنه!!!!!حالا هر کاری میتونه بکنه.
موفق باشید.
سلام
اولا که نام کاربری ادمین تو بانک نیست که بخواد طرف اونو بدونه,دوما چطوری میخواد پسورد رو دور بزنه؟
تشکر

MMSHFE
یک شنبه 30 بهمن 1390, 10:56 صبح
ميشه راجب چك كردن مقدار reffer و Javascript Injection يكم توضيح بدي؟
منظور از Javascript Injection همون نوشتن كدهاي Javascript از طريق فرم هاي ورودي هست؟ اگر اينه كه جلوش و بستم
ولي راجب reffer يكم توضيح بدين
نه یعنی هکر صفحه سایت شما رو با frame یا هر روش دیگری توی سایت خودش باز کنه و توی اسکریپت خودش کدهایی بنویسه که اطلاعات دریافت شده رو برای اون ایمیل کنه یا هر کار دیگه. مثلاً یک فریم تمام صفحه بگذاره که مشخص نباشه از فریم استفاده شده و لینک اون رو برای افراد بفرسته. فردی که وارد سایت میشه هم حواسش به آدرس نباشه یا آدرس شبیه سایت اصلی باشه. اونوقت میاد لاگین میکنه، غافل از اینکه اطلاعات تایپ شده در کادرها توسط جاوا اسکریپت دریافت شده و با AJAX برای یک سرور خاص ارسال میشه!
درمورد چک کردن Referer هم منظورم اینه که قبل از پردازش ورودی های کاربر، چک کنید اگه قراره فرم صفحه مقصد شما اطلاعات رو از mysite.com/login.php دریافت کنه، اطلاعات ورودی از anothersite.com/fake.php ارسال نشده باشه!
موفق باشید.

numberone1
یک شنبه 30 بهمن 1390, 14:20 عصر
نه یعنی هکر صفحه سایت شما رو با frame یا هر روش دیگری توی سایت خودش باز کنه و توی اسکریپت خودش کدهایی بنویسه که اطلاعات دریافت شده رو برای اون ایمیل کنه یا هر کار دیگه. مثلاً یک فریم تمام صفحه بگذاره که مشخص نباشه از فریم استفاده شده و لینک اون رو برای افراد بفرسته. فردی که وارد سایت میشه هم حواسش به آدرس نباشه یا آدرس شبیه سایت اصلی باشه. اونوقت میاد لاگین میکنه، غافل از اینکه اطلاعات تایپ شده در کادرها توسط جاوا اسکریپت دریافت شده و با AJAX برای یک سرور خاص ارسال میشه!
درمورد چک کردن Referer هم منظورم اینه که قبل از پردازش ورودی های کاربر، چک کنید اگه قراره فرم صفحه مقصد شما اطلاعات رو از mysite.com/login.php دریافت کنه، اطلاعات ورودی از anothersite.com/fake.php ارسال نشده باشه!
موفق باشید.
درمورد reffer دقيقا متوجه منظور شما شدم ممنون
اما درمورد js injection اين يه مورد سرقت اطلاعات يوزر هست ديگه و ربطي به سايت نداره كه؟
براي جلوگيري از js injection چه كاري ميشه كرد؟

MMSHFE
یک شنبه 30 بهمن 1390, 16:16 عصر
طبیعتاً یکی از کاربرانی که ممکنه توی سایت لاگین کنه، Admin هست. بنابراین JS Injection رو نباید شوخی بگیریم. راهکاری زیادی هم وجود داره. مثلاً URL مرورگر رو چک کنید که مربوط به دامنه خودتون باشه وگرنه اسکریپتها اجرا نشن. کلاً توی اینترنت اگه دنبال عبارت Prevent Javascript Injection with PHP بگردین، نتایج جالبی بدست خواهید آورد. موفق باشید.