տուն Պատրաստություններ ձմռանը Մուտքի հսկողություն: Ինչպես ստանալ իմ SQL հարցման արդյունքները

Մուտքի հսկողություն: Ինչպես ստանալ իմ SQL հարցման արդյունքները

այս աշխատանքըՔրիս Էնլիի Advanced SQL Injection In-ի մի մասի թարգմանությունն է SQL Serverհավելվածներ։ ()
Հետագա հոդվածներում, եթե կա ազատ ժամանակ, այս թարգմանությունըվերջ կդրվի։

P.S. Թարգմանությունն առավել կհետաքրքրի կրթական և պատմական նպատակներով։

Հոդվածի բնօրինակ անվանումը՝ Ընդլայնված SQL ներարկում SQL հավելվածներում:

անոտացիա

Այս հոդվածը մանրամասնորեն քննարկում է «SQL ներարկման» ընդհանուր մեթոդները հայտնի հարթակի համար Microsoft ինտերնետՏեղեկատվական սերվեր/Ակտիվ սերվերի էջեր/SQL սերվեր: Այն քննարկում է տարբեր տարբերակներինչպես օգտագործել SQL ներարկումը հավելվածներում և բացատրում է տվյալների վավերացման տեխնիկան և ինչպես ապահովել տվյալների բազաները, որտեղ ներարկումները կարող են օգտագործվել:

Ներածություն

Structured Query Language (SQL) կառուցվածքային լեզու է, որն օգտագործվում է տվյալների բազաների հետ փոխազդելու համար: SQL լեզվի բազմաթիվ «բարբառներ» կան, բայց այսօր, ընդհանուր առմամբ, դրանք բոլորը հիմնված են SQL-92 ստանդարտի վրա, որը վաղ ANSI ստանդարտներից է: SQL-ի հիմնական գործառնական միավորը հարցումն է, որը արտահայտությունների հավաքածու է, որը սովորաբար վերադարձնում է արդյունքների հավաքածու: SQL արտահայտությունները կարող են փոխել տվյալների բազաների կառուցվածքը (օգտագործելով տվյալների սահմանման լեզուների արտահայտություններ - DLL) և կառավարել դրանց բովանդակությունը (օգտագործելով տվյալների մանիպուլյացիայի լեզուների արտահայտություններ - DML): Այս հոդվածում մենք կանդրադառնանք Microsoft SQL Server-ում օգտագործվող transact-SQL-ին:

SQL ներարկումը հնարավոր է, երբ հարձակվողը կարող է տեղադրել իր սեփական SQL կոդը հարցման (հարցման) մեջ՝ վերահսկելու հավելվածին ուղարկվող տվյալները:

Սովորական SQL հայտարարությունը հետևյալն է.

Հեղինակներից ընտրեք id, անունը, ազգանունը

Այս արտահայտությունը վերցնում է «id», «անունը» և «ազգանունը» «հեղինակներ» աղյուսակի սյունակներից և վերադարձնում աղյուսակի բոլոր տողերը: Նմուշը կարող է սահմանափակվել կոնկրետ «հեղինակով», օրինակ.

Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ նախանուն = «Ջոն» և ազգանուն = «Սմիթ»

Հարկ է նշել, որ ին տրված խնդրանքըլարային տառերը բաժանվում են մեկ մեջբերումով: Ենթադրվում է, որ «անունը» և «ազգանունը» տվյալներ են, որոնք մուտքագրվում են օգտագործողի կողմից: AT այս դեպքըհարձակվողը կկարողանա ներարկել սեփական SQL հարցումը՝ հավելվածին ավելացնելով սեփական արժեքները: Օրինակ:

Անուն՝ jo "hn Ազգանուն՝ smith

Հետո արտահայտությունը դառնում է հաջորդ տեսքը:

Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ նախանուն = "jo"hn" և ազգանուն = "smith"

Այն բանից հետո, երբ տվյալների բազան կփորձի մշակել նման հարցումը, կվերադարձվի հետևյալ սխալը.

Սերվեր՝ Msg 170, Level 15, State 1, Line 1 Line 1. Սխալ շարահյուսություն «hn»-ի մոտ:

Սխալի պատճառն այն կլինի, որ մուտքագրված մեկ մեջբերումը կխաթարի հարցման մեջ սահմանազատող կառուցվածքը: Այսպիսով, տվյալների բազան անհաջող կերպով կփորձի կատարել «hn» հրամանը, որը կհանգեցնի սխալի: Արդյունքում, եթե հարձակվողը ձևաթղթում մուտքագրում է հետևյալ տեղեկատվությունը.

Անուն՝ jo"; աղյուսակի հեղինակներ-- Ազգանուն.

«Հեղինակների» աղյուսակը կջնջվի, թե ինչու է դա տեղի ունենում, կտեսնենք ավելի ուշ։

Դուք կարող եք մտածել, որ եթե մենք հանենք եզակի մեջբերումները մուտքագրման ձևից և նաև «փոխարինենք», դա կարող է լուծել մեր խնդիրը: Եվ դուք ճիշտ կլինեք, սակայն այս մեթոդը որպես այս խնդրի լուծում օգտագործելու հետ կապված որոշ խնդիրներ կան: Նախ, օգտվողի բոլոր մուտքերը «տողեր» չեն: Եթե ​​օգտագործողի ձևը կպարունակի հեղինակի «id»-ը, որը սովորաբար թիվ է: Օրինակ, մեր հարցումը կարող է այսպիսի տեսք ունենալ.

Ընտրեք id, անունը, ազգանունը հեղինակներից, որտեղ id=1234

Այս դեպքում կոտրիչը կարող է ազատորեն ավելացնել ցանկացած SQL արտահայտություն թվային տվյալներից հետո։ SQL հարցումների այլ տեսակներում օգտագործվում են տարբեր սահմանազատիչներ: Օրինակ, Microsoft Jet DBMS-ում սահմանազատիչը կլինի «#»: Երկրորդ, միայնակ չակերտներից «փախչելը» պաշտպանվելու ամենահեշտ ձևը չէ, ինչպես կարող է թվալ սկզբում: Այս մասին ավելի ուշ կխոսենք:

Եկեք օրինակ բերենք Active Server Pages (ASP) վրա հիմնված մուտքի էջի վրա, որն օգտագործում է SQL տվյալների բազա մուտք գործելու համար՝ հավելվածում օգտագործողին լիազորելու համար:

Ահա մուտքի ձևը պարունակող էջի կոդը, որում մուտքագրված են օգտանունը և գաղտնաբառը։

Մուտք էջ

Մուտք գործել

օգտագործողի անունը:
Գաղտնաբառ:

Ստորև բերված է կոդը (process_login.asp), որը որոշում է մուտքագրված տվյալների ճիշտությունը։

Նոր տեղում

>

Ամենահայտնի