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)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Discover a treasure trove of wisdom within this insightful piece, highly respected in the nurturing DEV Community enviroment. Developers, whether novice or expert, are encouraged to participate and add to our shared knowledge basin.

A simple "thank you" can illuminate someone's day. Express your appreciation in the comments section!

On DEV, sharing ideas smoothens our journey and strengthens our community ties. Learn something useful? Offering a quick thanks to the author is deeply appreciated.

Okay