ورود

View Full Version : بانک sql ما را هک کردند



mostafa612003
یک شنبه 16 تیر 1387, 07:49 صبح
با سلام
محتویات بانک sql را همه را پاک کردند
برای اینکه دوباره این کار انجام نشه ،چه باید بکنم؟


متشکرم

AminSobati
یک شنبه 16 تیر 1387, 10:33 صبح
سلام،
معمولا در چنین مواردی طبق تجربیات من:

- 50 درصد افراد Backup از دیتابیس ندارند
- 40 درصد جدیدترین Backupشون مال 2 ماه پیش هست!
- 8 درصد از Recovery Model=Simple استفاده میکنند و Backup جدید دارند
- 2 درصد از Recovery Model=Full استفاده میکنند و Backup جدید دارند

شما بفرمایید جزو کدوم دسته هستید تا راهنماییتون کنم

mostafa612003
یک شنبه 16 تیر 1387, 11:25 صبح
من backup دارم
در واقع اطلاعات روی هاست حذف شده است ولی روی دستگاه خودم دارم و با فرستادن دوباره بانک
)replicatio) مشکل حل می شود
می خواهم که این را نفوذی هکر را از بین ببرم و دیگر چنین مشکلی به وجود نیاید
متشکرم

amin44
یک شنبه 16 تیر 1387, 15:10 عصر
آيا كاربر sa را بستيد. من تجربه خيلي كمي دارم و بنا به دانش خودم گفتم.

Behrouz_Rad
یک شنبه 16 تیر 1387, 15:21 عصر
می خواهم که این را نفوذی هکر را از بین ببرم و دیگر چنین مشکلی به وجود نیاید

البته قضاوت صحیح سخت هست اما اگر کسی User Pass اتصال به دیتابیس شما رو نداشته باشه به احتمال قریب به یقین از SQL Injection استفاده کرده و دلیلش هم این هست که احتمالا شما دستورات SQL رو مستقیما در خود برنامه نوشتید! از Stored Procedure استفاده کنید تا دیگه چنین مشکلی پیش نیاد.

موفق باشید.

AminSobati
یک شنبه 16 تیر 1387, 17:58 عصر
اگر مشکل از Injection باشه باز هم این اتفاق میتونه رخ بده، پس کار رو از ریشه درست کنید

SYNDROME
یک شنبه 16 تیر 1387, 19:58 عصر
با تشکر از امین ثباتی

اگر مشکل از Injection باشه باز هم این اتفاق میتونه رخ بده، پس کار رو از ریشه درست کنید
1-کمی در رابطه با این Injection توضیح می دهید.
2-اگر دستورات را در SP بنویسیم چه محاسنی دارد؟
3-من خودم با دلفی کار می کنم و اگر قرار باشد همه دستورات را در SP بنویسم تعداد SP ها بالا می رود.برای رفع این مشکلات آیا شما پیشنهادی دارید.
با تشکر فراوان

m.hamidreza
یک شنبه 16 تیر 1387, 20:52 عصر
- 8 درصد از Recovery Model=Simple استفاده میکنند و Backup جدید دارند
- 2 درصد از Recovery Model=Full استفاده میکنند و Backup جدید دارند


مهندس ثباتی عزیز این Recovery Model کجا باید تنظیم شه؟


آيا كاربر sa را بستيد. من تجربه خيلي كمي دارم و بنا به دانش خودم گفتم.

کاربر sa چرا باید بسته شه؟




1-کمی در رابطه با این Injection توضیح می دهید.
2-اگر دستورات را در SP بنویسیم چه محاسنی دارد؟
3-من خودم با دلفی کار می کنم و اگر قرار باشد همه دستورات را در SP بنویسم تعداد SP ها بالا می رود.برای رفع این مشکلات آیا شما پیشنهادی دارید.
با تشکر فراوان

این تاپیک هارو ببینید :
http://barnamenevis.org/forum/showthread.php?t=58414
http://barnamenevis.org/forum/showthread.php?t=68063

استفاده از SP و استفاده از پارامترها در ارسال مقادیر به SP ها از حملات SQL INJECTION جلوگیری میکنه. حسن دیگه ای که داره اینه که SP یه دفعه کامپایل میشه و در دفعات بعدی که اون SP فراخوانی میشه سرعت اجرا به مراتب بیشتر از زمانی هست که شما یه Query رو اجرا میکنی.
زیاد شدن تعدادش هم عیبی نداره...

موفق باشی.

Behrouz_Rad
یک شنبه 16 تیر 1387, 22:45 عصر
استفاده از SP و استفاده از پارامترها در ارسال مقادیر به SP ها از حملات SQL INJECTION جلوگیری میکنه.

خیر. همیشه این طور نیست.
مثلا SP ای به شکل ذیل، مستعد SQL Injection هست:


create proc BadDynamicSQL(@userName nvarchar(25))
as
declare @sql nvarchar(255)
set @sql = 'select * from users where UserName = '''
+ @userName + ''''
exec sp_executesql @sql

go



حسن دیگه ای که داره اینه که SP یه دفعه کامپایل میشه و در دفعات بعدی که اون SP فراخوانی میشه سرعت اجرا به مراتب بیشتر از زمانی هست که شما یه Query رو اجرا میکنی.

البته این تصوری هست که اغلب دارند اما در واقع اینطور نیست!
دستوارت SQL به طور مستقیم هم، Cache و Pre-Compile میشن. منبع دقیقا خاطرم نیست.

موفق باشید.

SYNDROME
دوشنبه 17 تیر 1387, 07:27 صبح
خیر. همیشه این طور نیست.
مثلا SP ای به شکل ذیل، مستعد SQL Injection هست:


create proc BadDynamicSQL(@userName nvarchar(25))
as
declare @sql nvarchar(255)
set @sql = 'select * from users where UserName = '''
+ @userName + ''''
exec sp_executesql @sql
go


چرا این SP مستعد Injection شدن است؟
آیا باید دستورات به شکل خاصی نوشته شود.
با تشکر

m.hamidreza
دوشنبه 17 تیر 1387, 09:53 صبح
خیر. همیشه این طور نیست.
مثلا SP ای به شکل ذیل، مستعد SQL Injection هست:

مهندس میپیچونیا ! :لبخندساده: احتمال نوشتن یه همچین SP ای خیلی کمه... ولی فرمایش استاد متین است.


البته این تصوری هست که اغلب دارند اما در واقع اینطور نیست!
دستوارت SQL به طور مستقیم هم، Cache و Pre-Compile میشن. منبع دقیقا خاطرم نیست.

اینو من تو خیلی از وب سایت ها و وبلاگ های معتبر دیدم که از مزیت های استفاده از SP سریعتر اجرا شدنش بوده...
SQLAUTHORITY.COM (http://blog.sqlauthority.com/2007/04/13/sql-server-stored-procedures-advantages-and-best-advantage/)


چرا این SP مستعد Injection شدن است؟

از بس این بهروز خان نکته سنج هست!

SabaSabouhi
دوشنبه 17 تیر 1387, 12:06 عصر
چرا این SP مستعد Injection شدن است؟
آیا باید دستورات به شکل خاصی نوشته شود.
با تشکر

با سلام

رشته حرفى تو SQL با «'» آغاز مى‌شه و با همين هم تموم مى‌شه.
حالا تصور كنيد كه اگه توى يك رشته كاراكتر «'» وجود داشته باشه چه اتفاقى مى‌افته؟ مثلاً نام بازيكن معروف NBA شكيل اونيل به شكل O'nil نوشته مى‌شه كه يه دونه «'» توش داره اگه اين عبارت به صورت رشته‌ى حرفى توى يك Script استفاده بهش شما يك خطا دريافت مى‌كنيد. مثلاً



UPDATE Players SET Name = 'O'nil' WHERE PlayerID = 1


حالا ممكنه اين كار به صورت عمدى و با برنامه انجام بشه و به شكلى كه خطا هم نده، ولى كارى رو انجام بده كه مهاجم مى‌خواد.

راه حل هم ساده هست، كافيه هر متنى كه قراره توى يك Script قراربگيره از نظر داشتن كاراكتر «'» كنترل بشه و اگه داشت يكى ديگه هم اضافه بشه. دو تا «'» مشكل رو حل مى‌كنه




UPDATE Players SET Name = 'O''nil' WHERE PlayerID = 1


اين عبارت درست كار مى‌كنه و مشكلى هم نداره.

صبا صبوحى

AminSobati
دوشنبه 17 تیر 1387, 13:01 عصر
مهندس ثباتی عزیز این Recovery Model کجا باید تنظیم شه؟



از دیتابیس Properties بگیرین، در Options

m.hamidreza
دوشنبه 17 تیر 1387, 20:29 عصر
حالا تصور كنيد كه اگه توى يك رشته كاراكتر «'» وجود داشته باشه چه اتفاقى مى‌افته؟

در حالتی که پارامتریک Name رو ارسال کنید هیچ error ای دریافت نمیکنید و Update انجام میشه شما احتمالا حالت Query رو بررسی کردید.
با SP اون single qoutation اضافه میشه اون وسط...

از دیتابیس Properties بگیرین، در Options
ظاهرا تو این حالت کلیه transaction log records رو ذخیره میکنه. این log همون فایل ldf هست ؟ بعد از رو اون یعنی db بر میگرده؟!

AminSobati
دوشنبه 17 تیر 1387, 20:57 عصر
ظاهرا تو این حالت کلیه transaction log records رو ذخیره میکنه. این log همون فایل ldf هست ؟ بعد از رو اون یعنی db بر میگرده؟!

بله همون ldf هست. با داشتن یک Full Backup از قبل، و Log Backup های منظم، میشه دیتابیس رو به نقطه خاصی از زمان برگردوند، مثلا درست به زمان قبل از Drop شدن همه جداول

mostafa612003
دوشنبه 11 شهریور 1387, 08:14 صبح
با تشکر از همه دوستان
من در صفحاتم دستور upadte ندارم فقط از select استفاده می کنم .آیا این امکان هست که باز هم از sqlinjection برای تغییر اطلاعات جدولها استفاده کرده باشند؟

متشکرم

mostafa612003
چهارشنبه 13 شهریور 1387, 09:01 صبح
با تشکر از همه دوستان
من در صفحاتم دستور upadte ندارم فقط از select استفاده می کنم .آیا این امکان هست که باز هم از sqlinjection برای تغییر اطلاعات جدولها استفاده کرده باشند؟

متشکرم
__________________