امنیت کامپیوتر قسمت یازدهم
درک SQL نسبتاً آسان است. در واقع خیلی شبیه به زبان انگلیسی است. دستوراتی مانند SELECT برای دریافت داده، INSERT برای قرار دادن داده ها و UPDATE برای تغییر داده ها وجود دارد. برای ورود به یک وب سایت، صفحه وب باید جدول پایگاه داده را جستجو کند تا ببیند آیا نام کاربری و رمز عبور صحیح است یا خیر.
ساختار کلی SQL به صورت زیر است :
select column1, column2 from tablename
یا
select * from tablename;
Conditions:
select columns from tablename where condition;
مثال:
SELECT * FROM tblUsers WHERE USERNAME = ‘jsmith’
این عبارت تمام ستون ها یا فیلدها را از جدولی به نام tblUsers که نام کاربری آن jsmith است بازیابی می کند. مشکل زمانی ایجاد می شود که سعی می کنیم دستورات SQL را در صفحه وب خود قرار دهیم. به یاد داشته باشید که صفحه وب به برخی از زبان های وب مانند PHP یا ASP.net نوشته شده است. اگر فقط دستورات SQL را مستقیماً در کد صفحه وب قرار دهید، خطا ایجاد می شود. عبارات SQL در کد برنامه نویسی برای وب سایت باید از علامت نقل قول (quotation) استفاده کنند تا کد SQL را از کد برنامه نویسی جدا کنند. یک دستور SQL معمولی ممکن است چیزی شبیه به این باشد:
اگر نام کاربری ‘jdoe’ و رمز عبور ‘password’ را وارد کنید، این کد دستور SQL را تولید می کند:
“SELECT * from tblUser WHERE USERNAME= ‘”+ txtUsername.Text + ‘ AND PASSWORD ='”+ txtPassword.Text +”‘”.
درک این موضوع حتی برای غیر برنامه نویسان نیز نسبتاً آسان و موثر است. اگر در پایگاه داده یک تطابق وجود داشته باشد، این به معنای مطابقت نام کاربری و رمز عبور است. اگر هیچ رکوردی از پایگاه داده برگردانده نشد، به این معنی است که هیچ تطابقی وجود نداشته است، و این یک ورود معتبر نیست. ابتدایی ترین شکل تزریق SQL به دنبال براندازی این فرآیند است. ایده این است که عبارتی ایجاد کنیم که همیشه درست باشد. به عنوان مثال، مهاجم به جای قرار دادن یک نام کاربری و رمز عبور واقعی در فیلدهای متنی مناسب، ‘ یا ‘1’ = ‘1 را در کادرهای نام کاربری و رمز عبور وارد می کند. که باعث می شود برنامه این کوئری را ایجاد کند:
SELECT * FROM tblUsers WHERE USERNAME = ” or ‘1’ = ‘1’ AND PASSWORD = ” or ‘1’ = ‘1’.
بنابراین شما به پایگاه داده و برنامه میگویید که تمام رکوردهایی را که در آن نام کاربری و رمز عبور خالی هستند یا 1 = 1 هستند، برگردانند.احتمال خالی بودن نام کاربری و رمز عبور بسیار کم است. اما من مطمئن هستم که همیشه 1=1. هر عبارت درستی را می توان جایگزین کرد. به عنوان مثال a = a و bob = bob هستند. نقطه عطف این حمله این است که جلوگیری از آن بسیار آسان است.
اگر برنامه نویس وب به سادگی تمام ورودی ها را قبل از پردازش فیلتر کند، این نوع تزریق SQL غیرممکن خواهد بود. این بدان معنی است که قبل از پردازش هر ورودی کاربر، کد برنامه نویسی صفحه وب از طریق آن کد برای نمادهای رایج تزریق SQL، نمادهای اسکریپت نویسی و موارد مشابه نگاه می کند.خوشبختانه هر ساله وب سایت های کمتر و کمتری در معرض این نوع حمله قرار می گیرند.
قوانین ارسال دیدگاه در سایت