8-Laboratoriya ishi Mavzu: SQL ineksiyalardan ma’lumotlar bazasini himoyalash.
Ishdan maqsad: ineksiyalardan ma’lumotlar bazasini himoyalash o’rganish va amalda qo’llash.
SQL in'ektsiyasining asosiy shakli SQL buyruqlari bilan biriktirilgan va bajariladigan foydalanuvchi kiritadigan o'zgaruvchiga to'g'ridan-to'g'ri kodni kiritishdan iborat. Kamroq to'g'ridan-to'g'ri hujum zararli kodni jadvalda yoki metadata sifatida saqlash uchun mo'ljallangan satrlarga kiritadi. Saqlangan satrlar keyinchalik dinamik SQL buyrug'iga biriktirilsa, zararli kod bajariladi. Xavfsizlik puxta va qat'iyatli bo'lish demak, biz ham ushbu mashqni TSQL-da bajarishimiz kerak. Yomon ma'lumotlar bizning ma'lumotlar bazamizda saqlanmasligi yoki ularga ta'sir qilmasligi uchun TSQL-da ma'lumotlarni tozalash usullarining bir nechta misollari keltirilgan.
1.Umumiy qidiruv uchun kirishni qabul qilish uchun parametrlashtirilgan saqlangan protseduralardan foydalaning. Sizga qo'shimcha xavfsizlik parametrlarini taqdim qilishdan tashqari, kerak bo'lganda ular ishlash uchun oson sozlanishi mumkin
2.Ishlatilganda dinamik SQL-ni o'lchash. Bu SQL in'ektsiyasiga nisbatan ancha moslashuvchanlikni ta'minlaydi. Quyidagi izlanishning oddiy namunasi bo'lib, unda TSQL ichiga qattiq kodlangan emas, balki @search_criteria kiritish parametrlashtiriladi:
DECLARE @CMD NVARCHAR(MAX);
SELECT @CMD = 'SELECT * FROM Person.Person
WHERE LastName = @search_criteria';
PRINT @CMD;
EXEC sp_executesql @CMD, N'@search_criteria NVARCHAR(1000)', @se arch_criteria;
E'tibor bering, @search_criteria parametri dinamik SQL ichida qo'shimcha parametrlar ro'yxati sifatida aniqlanadi. Parametrlarni bosqichma-bosqich o'tkazib, biz TSQL-ni qurishdan, shuningdek, apostroflar va boshqa keng tarqalgan SQL in'ektsiya teshiklarining qo'lda tekshirilishini talab qilamiz.
3.Dinamik SQL-ni bajarishda sp_executesql-dan foydalaning. Bu EXEC () ga nisbatan ancha moslashuvchanlikni ta'minlaydigan ko'p qirrali protsedura. Bundan tashqari, bu xavfsizroq va o'rnatilgan parametrlashtirishga imkon beradi. Yodda tutingki, dinamik SQL bayonoti va parametrlar ro'yxati sp_executesql ga o'tishdan oldin erkin sozlanishi mumkin.
4.Agar kerak bo'lsa, o'zgaruvchan nomaqbul belgilarni tozalash uchun QUOTENAME-dan foydalaning. Masalan, quyidagi TSQL satrni apostrof bilan almashtirish urinishining o'rnini haqiqiy satr bilan almashtiradi:
DECLARE @form_input VARCHAR(250) = '''SELECT * FROM dbo.all_of_ my_passwords'; SELECT @form_input;
SELECT QUOTENAME(@form_input, '''');
Natijalar ip atrofidagi apostroflarni ko'rsatadi. Bunga qo'shimcha ravishda, kirish satridagi apostrof, uni ishlatadigan satrlar buzilmasligini ta'minlaydigan ikki tomon lama apostroflar bilan almashtirildi:
Results.
QUOTENAME-dan foydalanishda yomon alternativalar ko'p, ulardan eng yomoni belgi kombinatsiyalarini qo'lda sozlash uchun REPLACE ko'p funktsiyalarini qo'lla shdir. Natija ko'pincha quyidagicha ko'rinadi:
DECLARE @form_input VARCHAR(250) = '''SELECT * FROM dbo.all_of_ my_passwords';
SELECT REPLACE(@form_input, '''', '''''');
Bu kirishlarni tozalashning qiyin usuli, chunki xaker tomonidan qilinadigan har qan day yomon harakatni oldindan bilish va bu erda hisobga olish kerak. Agar biz bosh qa ajratilgan satr ichida dinamik SQL-ni bajarayotgan kambag'al dastaklar bo'lsak, unda apostroflar hajmi tartibsizlikka va xatolarga olib keladigan kodni keltirib chiq aradigan aylanish miqdoriga yaqinlashishini kuting. Ilova va veb-kod ham tozalovc hi kirishlarga ega ekanligiga ishonch hosil qiling. Bu bizni yomon kod, inson xatosi yoki xavfsizlikning zaifligini salbiy ta'siridan himoya qiladigan qo'shimcha himoya qatlamlarini ta'minlaydi.
LIKE operatorlaridan ehtiyotkorlik bilan foydalaning.
Agar foydalanuvchi ma'lumotlari LIKE operatoridan foydalanadigan so'rovga yubo rilsa, natijada olingan so'rov faqat to'g'ri ma'lumotlarni so'rashiga amin bo'lishimiz kerak. Masalan, "Edvard" deb nomlangan odamlarni oddiy qidirishimiz mumkin:
DECLARE @Search_Criteria NVARCHAR(MAX) = 'Edward';
SELECT
*
FROM Person.Person
WHERE Person.FirstName LIKE @Search_Criteria;
Natijalar Yusuf ismli 72 kishidan iborat:
Agar foydalanuvchi qidiruviga foiz belgisini qo'shsa nima bo'lishini ko’ramiz:
Do'stlaringiz bilan baham: |