Ինչպես կանխել SQL ներարկումը PHP- ում (նկարներով)

Բովանդակություն:

Ինչպես կանխել SQL ներարկումը PHP- ում (նկարներով)
Ինչպես կանխել SQL ներարկումը PHP- ում (նկարներով)

Video: Ինչպես կանխել SQL ներարկումը PHP- ում (նկարներով)

Video: Ինչպես կանխել SQL ներարկումը PHP- ում (նկարներով)
Video: Ձկան յուղ՝ Օմեգա- 3 ինչու և ինչպես օգտագործել, ում չի կարելի / Omega-3 2024, Մայիս
Anonim

Այս wikiHow- ը սովորեցնում է ձեզ, թե ինչպես կանխել SQL ներարկումը ՝ օգտագործելով PHP- ում պատրաստված պատրաստված հայտարարություններ: SQL ներարկումն այսօր վեբ ծրագրերի ամենատարածված խոցելի տեղերից մեկն է: Պատրաստված հայտարարությունները օգտագործում են կապված պարամետրեր և չեն համատեղում փոփոխականները SQL տողերի հետ, ինչը անհնար է դարձնում հարձակվողին փոփոխել SQL հայտարարությունը:

Պատրաստված հայտարարությունները միավորում են փոփոխականը կազմված SQL հայտարարության հետ, այնպես որ SQL- ն և փոփոխականները ուղարկվում են առանձին: Այնուհետև փոփոխականները մեկնաբանվում են որպես ուղղակի տողեր և ոչ SQL հայտարարության մաս: Օգտագործելով ստորև բերված քայլերի մեթոդները, ձեզ հարկավոր չի լինի օգտագործել SQL ներարկման զտման այլ տեխնիկա, օրինակ ՝ mysql_real_escape_string ():

Քայլեր

Մաս 1 -ը 2 -ից. SQL ներարկման հասկացում

Քայլ 1. SQL ներարկումը խոցելիության տեսակ է այն ծրագրերում, որոնք օգտագործում են SQL տվյալների բազա:

Խոցելիությունը ծագում է, երբ օգտագործողի մուտքն օգտագործվում է SQL հայտարարության մեջ.

$ name = $ _GET ['օգտվողի անուն']; $ query = "ԸՆՏՐԵԼ գաղտնաբառ tbl_user WHERE name = '$ name'";

Քայլ 2. Օգտվողի կողմից մուտքագրվող URL- ի փոփոխականի օգտվողի արժեքը կտրվի $ $ փոփոխականի:

Այն անմիջապես տեղադրվում է SQL հայտարարության մեջ, ինչը հնարավորություն է տալիս օգտվողին խմբագրել SQL հայտարարությունը:

$ name = "admin 'OR 1 = 1 -"; $ query = "ԸՆՏՐԵԼ գաղտնաբառ tbl_user WHERE name = '$ name'";

Քայլ 3. SQL տվյալների բազան այնուհետև կստանա SQL քաղվածքը հետևյալ կերպ

ԸՆՏՐԵԼ գաղտնաբառ tbl_users WHERE name = 'admin' OR 1 = 1 - '

  • Սա վավեր SQL է, բայց օգտվողին մեկ գաղտնաբառ վերադարձնելու փոխարեն, քաղվածքը կվերադարձնի tbl_user աղյուսակի բոլոր գաղտնաբառերը: Սա այն չէ, ինչ ցանկանում եք ձեր վեբ ծրագրերում:

    2 -րդ մաս 2 -ից. Օգտագործելով mySQLi ՝ պատրաստված հայտարարություններ ստեղծելու համար

    2542820 1
    2542820 1

    Քայլ 1. Ստեղծեք mySQLi SELECT հարցումը:

    Օգտագործեք ստորև բերված կոդը ՝ mySQLi Prepared Statements- ի միջոցով աղյուսակից տվյալներ ընտրելու համար:

    $ name = $ _GET ['օգտվողի անուն']; if ($ stmt = $ mysqli-> պատրաստել («ԸՆՏՐԵԼ գաղտնաբառ tbl_users WHERE name =?»)) {// Փոփոխականը միացրեք պարամետրին որպես տող: $ stmt-> bind_param ("s", $ name); // Կատարել հայտարարությունը: $ stmt-> կատարել (); // Ստացեք փոփոխականները հարցումից: $ stmt-> bind_result ($ pass); // Բեռնել տվյալները: $ stmt-> վերցնել (); // Displayուցադրել տվյալները: printf (" %s օգտվողի գաղտնաբառը %s / n է", $ name, $ pass); // Փակեք պատրաստված հայտարարությունը: $ stmt-> փակել (); }

    Նշում. $ Mysqli փոփոխականը mySQLi միացման օբյեկտ է:

    2542820 2
    2542820 2

    Քայլ 2. Ստեղծեք mySQLi INSERT հարցումը:

    Օգտագործեք ստորև բերված ծածկագիրը ՝ տվյալները տեղադրելու համար աղյուսակում ՝ օգտագործելով mySQLi Պատրաստված հայտարարությունները:

    $ name = $ _GET ['օգտվողի անուն']; $ գաղտնաբառ = $ _GET ['գաղտնաբառ']; if ($ stmt = $ mysqli-> պատրաստել («ՄՏԱԵՔ tbl_users (անուն, գաղտնաբառ) ԱՐUԵՔՆԵՐ (?,?)")) {// Փոփոխականները միացրեք պարամետրին որպես տողեր: $ stmt-> bind_param ("ss", $ name, $ գաղտնաբառ); // Կատարել հայտարարությունը: $ stmt-> կատարել (); // Փակեք պատրաստված հայտարարությունը: $ stmt-> փակել (); }

    Նշում. $ Mysqli փոփոխականը mySQLi միացման օբյեկտ է:

    2542820 3
    2542820 3

    Քայլ 3. Ստեղծեք mySQLi UPDATE հարցումը:

    Օգտագործեք ստորև բերված ծածկագիրը ՝ mySQLi Preparated Statements- ի միջոցով աղյուսակում տվյալները թարմացնելու համար:

    $ name = $ _GET ['օգտվողի անուն']; $ գաղտնաբառ = $ _GET ['գաղտնաբառ']; if ($ stmt = $ mysqli-> պատրաստել ("UPDATE tbl_users SET password =? WHERE name =?")) {// Փոփոխականները միացրեք պարամետրին որպես տողեր: $ stmt-> bind_param ("ss", $ գաղտնաբառ, $ name); // Կատարել հայտարարությունը: $ stmt-> կատարել (); // Փակեք պատրաստված հայտարարությունը: $ stmt-> փակել (); }

    Նշում. $ Mysqli փոփոխականը mySQLi միացման օբյեկտ է:

    2542820 4
    2542820 4

    Քայլ 4. Ստեղծեք mySQLi DELETE հարցումը:

    Ստորև բերված սցենարը այն է, թե ինչպես ջնջել տվյալները աղյուսակից ՝ օգտագործելով mySQLi- ի պատրաստված հայտարարությունները:

    $ name = $ _GET ['օգտվողի անուն']; $ գաղտնաբառ = $ _GET ['գաղտնաբառ']; if ($ stmt = $ mysqli-> պատրաստել ("DEՆTEԵԼ tbl_users WHERE name =?")) {// Փոփոխականը պարամետրի հետ կապել որպես տող: $ stmt-> bind_param ("s", $ name); // Կատարել հայտարարությունը: $ stmt-> կատարել (); // Փակեք պատրաստված հայտարարությունը: $ stmt-> փակել (); }

Խորհուրդ ենք տալիս: