آموزش sql injection - نسخهی قابل چاپ +- انجمن انیاک (http://forum.learninweb.com) +-- انجمن: آموزش های تصویری (/forumdisplay.php?fid=7) +--- انجمن: آموزش تصویری SQL Server (/forumdisplay.php?fid=17) +--- موضوع: آموزش sql injection (/showthread.php?tid=392) |
آموزش sql injection - learninweb - 03-03-2013 08:40 AM تزریق به پایگاه داده یا sql injection : تزریق به پایگاه داده (به انگلیسی: SQL injection) نوعی فن تزریق کد است که نقص امنیتی نرمافزار وبسایت را اکسپلویت میکند به این صورت که نفوذگر با یک سری دستورهای اسکیوال عملیاتی را (متفاوت با عملیات عادی موردنظر طراح وبسایت) در پایگاه داده وبسایت آسیبپذیر انجام میدهد. این آسیبپذیری جزو ده آسیبپذیری رایج نرمافزارهای وب در سال ۲۰۰۷ و ۲۰۱۰ برشمرده شدهاست. تزریق SQL یک روش حمله است که هدف آن داده های ساکن در یک پایگاه داده می باشد که از طریق FireWall محافظت می شود. حمله معمولا به علت مدیریت ضعیف در اعتبار سنجی کدها و یا ورودیهای برنامه (وب سایت) اتفاق می افتد. حمله تزریق SQL زمانی اتفاق می افتد که یک مهاجم قادر به قرار دادن یک سری از عبارتهای SQL در یک Query (پرس و جو) با دستکاری داده های ورودی کاربر در یک برنامه مبتنی بر وب می باشد. البته این مساله نیز مستقیما با نحوه مدیریت کدها و ورودیهای وب سایت رابطه مستقیم دارد. یک حمله کننده می تواند از نقصهای برنامه نویسی و یا حفره های امنیتی وب سایت و یا نرم افزار به راحتی برای دستیابی به اطلاعات یک پایگاه داده استفاده نماید. پرس و جوی معمول دارای چند بخش مختلف به شرح ذیل می باشد: 1.دستور Select: با استفاده از این دستور ستونهایی که مورد نظرمان است را انتخاب می نمائیم. 2.From : که مشخص می نماید که ستونهای مورد نظر ما از کدام جدول انتخاب شوند 3.Where: که در آن شروطی را مشخص می نمائیم. 4.و یک سری دستورات و عبارها و متدهای دیگر . . . حملات تزریق از طریق SQL فقط در بخش شرطی Where اتفاق می افتند. در ادامه توضیح خواهیم داد که این مساله چگونه رخ می دهد. این آسیبپذیری از راههای گوناگونی پدید میآید. یک طریق فیلترنشدن Escape characterها (" و ') است. برای مثال: کد: statement = "SELECT * FROM users WHERE name = '" + userName + "';" کد: ' OR 'a'='a کد: SELECT * FROM users WHERE name = '' OR 'a'='a'; کد: ' OR 'a'='a' -- ' کد: SELECT * FROM users WHERE name = '' OR 'a'='a' -- '; یا مثلاً واردشدن چنین عبارتی: کد: a'; DROP TABLE users; SELECT * FROM userinfo WHERE 't' = 't در ژوئیهٔ ۲۰۱۲ گروهی تحت عنوان D33D با نفوذ به زیردامنهای از یاهو، Yahoo Voices، به همین شیوه، گواهینامههای لاگین بیش از ۴۵۰۰۰۰ کاربر این وبگاه را ربودند.[۳] منبع : ویکی پدیا . استفاده از پارامترهاي ورودي علاوه بر اين که کار را سادهتر ميکند و قابليتهاي بيشتري به روالهاي ذخيره شده ميدهد از بروز حمله SQL Injection نيز جلوگيري ميکند. براي درک حمله SQL Injection به يک مثال توجه کنيد. فرض کنيد که يک سايت وب داريد که در آن کاربر ميتواند نام مشتري را وارد کند تا آدرس و تلفن آن نمايش داده شود. در برنامه ASP يا PHP خود حتماً کدي مشابه کد زير خواهيد داشت که در آن مقدار وارد شده توسط کاربر در متغير CusName ذخيره ميشود. کد: sql = "Select * from customer where name= ' " کد: Ali' ; Drop Table Customer - - کد: Select * from customer where name = 'Ali' ; Drop Table Customer - - ' کد: Select * from customer where name = 'Ali' ; به اين ترتيب يک کاربر حرفهاي به سادگي ميتواند اطلاعات شما را حذف کند ( و بسياري کارهاي ديگر). در صورتيکه شما از روالهاي ذخيره شده داراي پارامتر استفاده کنيد ديگر چنين اتفاقي نميافتد و توسط دستور وارد شده رکوردهائي که نام آنها برابر عبارت Ali' ; Drop Table Customer - - است نمايش داده ميشود. منبع : آموزش SQL Server انتشارت پیروز الوان - تولید کننده نرم افزارهای آموزشی انیاک |