DEV Community

Cover image for Ծրագրային անվտանգություն՝ SQL Injection (մաս 1)
Narek Babajanyan
Narek Babajanyan

Posted on • Edited on

1 1

Ծրագրային անվտանգություն՝ SQL Injection (մաս 1)

SQL injection֊ը հանդիսանում է վեբ֊ծրագրերի ամենատարածված խոցելիություններից (vulnerability) մեկը և գտնվում է OWASP հիմնադրամի 10 ամենատարածված խոցելիությունների ցանկի OWASP Top 10 առաջին հորիզոնականում։

Իրականում OWASP Top 10 ցանկի առաջին հորիզոնականում տեղ է գտել ավելի ընդհանրական Injection տեսակը, իսկ SQL injection֊ը դրա տեսակներից մեկն է։

Փորձենք հասկանալ ինչու է առաջանում խոցելիության այս տեսակը, ինչ հնարավորություններ է ընձեռում հարձկավողին և պաշտպանության ինչ միջոցներ կան։

Օրինական ճանապարհով ծրագրային անվտանգություն ուսումնասիրելու համար կարելի է օգտվել հատուկ այդ նպատակով պատրաստված խոցելի ծրագրերից, ինչպիսիք են օրինակ OWASP Juice Shop֊ը և bWAPP֊ը։ Նշվածներից բացի գոյություն ունեն բազմաթիվ այլ խոցելի ծրագրեր, որոնց ցանկին կարելի է ծանոթանալ այստեղ

Խոցելիության էությունը

Դիտարկենք SQL տվյալների բազայի պարզագույն օրինակ։ Ենթադրենք, ունենք տվյալների բազա, որում պահվում են տվյալ ընկերության ապրանքանիշները, որոնց մի մասը դեռևս չի թողարկվել։

SELECT * FROM products;
Enter fullscreen mode Exit fullscreen mode
ID name released
1 Laptop 1
2 Smartphone 1
3 Time machine 0
4 Teleporter 0
5 Electric vehicle 1
6 3D printer 1
7 Secret product 0

Ընկերության վեբ կայքում թվարկվում են բոլոր թողարկված ապրանքանիշները։

SELECT * FROM products WHERE released=1;
Enter fullscreen mode Exit fullscreen mode

Բացի այդ, կայքում կարելի է կատարել որոնում թողարկված ապրանքանիշների մեջ։ Ենթադրենք, օգտատիրոջ մուտքագրած ցանկացած բանալի բառով անմիջապես կազմվում է հարցում և ուղարկվում տվյալների բազային։ Այս դեպքում օգտատերը կարող է որոնել phone բանալի բառը՝

SELECT * FROM products 
WHERE name LIKE '%phone%' AND released=1;
Enter fullscreen mode Exit fullscreen mode
ID name released
2 Smartphone 1

Իսկ ի՞նչ եթե մուտքագրվի հատուկ պատրաստված այնպիսի "բանալի բառ", որը տվյալների բազայի կողմից դիտարկվի որպես հրաման։

Հենց սրանում էլ կայանում է SQL Injection խոցելիության էությունը։

Ենթադրենք, որոնման դաշտում մուտագրվել հետևյալ տեսքն ունեցող մի արտահայտություն՝ ' OR 1=1; --, ապա տվյալների բազայում կատարվող հարցումը կունենա հետևյալ տեսքը՝

SELECT * FROM products 
WHERE name LIKE '%' OR 1=1; -- %' AND released=1;
Enter fullscreen mode Exit fullscreen mode

Հարցման արդյունքում կվերադարձվեն բոլոր ապրանքանիշները, նույնիսկ դեռևս չթողարկվածները։ Նման արդյունքի պատճառը կայանում է նրանում, որ մուտքագրված արտահայտության առաջին չակերտը փակում է LIKE պնդման չակերտը և ընդհանուր հարցման հրամանի մեջ ավելացնում նոր պնդում՝ OR 1=1 (որը միշտ ճիշտ է), իսկ -- սիմվոլները հարցման AND released=1; հատվածը փոխակերպում են մեկնաբանության (comment), որն առհամարվում է տվյալների բազայի կողմից։

Այսպիսով, SQL injection խոցելիության պարզագույն կիրառմամբ հնարավոր է դառնում չնախատեսված տվյալների ստացումը։ Դժվար չէ պատկերացնել, որ այլ հրամանների մուտքագրման պարագայում հնարավոր կլինի մուտք գործել որպես այլ օգտատեր կամ նույնիսկ ջնջել/փոփոխել տվյալների բազայում պահվող տեղեկատվությունը։

Հաջորդ մասում կդիտարկենք առավել իրատեսական օրինակներ՝ շնորհիվ վերոնշյալ bWAPP և OWASP Juice Shop ծրագրերի։

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay