Ինչպես կանխել Sql ներարկումը

Ի՞նչ է SQL ներարկումը (SQLi):

Բոլորը գիտեն, որ տեխնոլոգիաների առաջխաղացման հետ մեկտեղ անվտանգությունը յուրաքանչյուր բիզնեսի և սոցիալական մեդիայի հարթակի հիմնական և կարևոր հատկանիշն է: Գրեթե բոլոր բիզնեսները փոխանցում են իրենց բիզնեսի տվյալները, այս տվյալները պահում են տվյալների շտեմարաններում: Այսպիսով, SQL-ն ապահովում է ձեր տվյալները հաքերներից փրկելու տեխնիկա: Մենք կարող ենք կանխել մեր վեբ կայքի տվյալները հաքերներից՝ օգտագործելով տարբեր տեխնիկա: Նմանապես, SQL ներարկումը հաքերային տեխնիկա է: Հաքերները կարող են մուտք գործել ձեր տվյալները, ինչպես նաև նրանք կարող են խափանել ձեր սերվերները՝ ձեր տվյալների բազաներում որոշակի կոդ ներարկելու միջոցով: Այս մեթոդը իրագործելի է դառնում թեքված վեբ փաթեթների ոչ պատշաճ կոդավորման պատճառով: Որոշ նոր ծրագրավորողներ չեն ստուգում տվյալների դաշտի դատարկությունը և դատարկ դաշտը SQL ներարկման պատճառ են հանդիսանում:

Կանխել SQL ներարկումը պարամետրացված հարցումների միջոցով

Այս մոտեցումը բաղկացած է մեր հարցումներում հարցականի տեղապահով (?) պատրաստված հայտարարությունների օգտագործումից, ամեն անգամ, երբ մեզ անհրաժեշտ է սպառողի կողմից տրամադրված վճար ներմուծել: Սա շատ արդյունավետ է և, եթե JDBC շարժիչ ուժի ներդրման մեջ ճիճու չկա, անձեռնմխելի է շահագործումներից:

Այս տեխնիկայի պարզ օրինակ կոդն է.

հանրային ցուցակ safeFindAccountsByCustomerId (String customerId)

նետում Բացառություն {

Լարային sql = ‘ ընտրել ‘ + ‘ customer_id, acc_number, branch_id, accounts from Accounts ‘ + ‘ where customer_id = ? ' ;

Միացում c = dataSource.getConnection( );

PreparedStatement p = c.prepareStatement(sql);

p.setString(1, customerId);

ResultSet rs = p.executeQuery(sql));

// բաց թողնված – մշակել տողերը և վերադարձնել հաշիվների ցուցակը

}

Վերոնշյալ կոդում պատրաստելիս () մեթոդը հասանելի է Միացման օրինակում՝ PreparedStatement ստանալու համար: Սա մեզ թույլ է տալիս հիմնավոր կերպով մտցնել անձի կողմից տրված արժեքները հարցի մեջ՝ նախքան այն կատարելը:

PDO պատրաստված հարցումների օգտագործումը

Օգտագործեք PDO և պատրաստված հարցումներ:

($conn-ը PDO օբյեկտ է)

$stmt = $conn -> պատրաստել (‘ INSERT INTO tbl VALUES ( :Id , :name ) ‘ );

$stmt -> bindValue ( ‘ :id ‘ , $id );

$stmt -> bindValue(‘ :name ‘ , $name ) ;

$stmt -> execute( );

Պատրաստված հայտարարությունները ճկուն են SQL ներարկման նկատմամբ, քանի որ այն փաստի պարամետրի արժեքները, որոնք հետագայում փոխանցվում են եզակի արձանագրության օգտագործմամբ, այժմ պետք չէ հաջողությամբ փախչել: Եթե ​​հայտարարագրի բնօրինակ ձևանմուշը չի ստացվել արտաքին մուտքից, SQL ներարկումը չի կարող առաջանալ:

Կանխել Ruby Framework-ում օբյեկտների հարաբերական քարտեզագրման (ORM) միջոցով

Մշակող շատ թիմեր ընտրում են օգտագործել Object Relational Mapping (ORM) շրջանակները՝ SQL արդյունքի միավորների թարգմանությունը կոդի օբյեկտների լրացուցիչ անխափան դարձնելու համար: ORM գործիքները հաճախ առաջարկում են մշակողներին հազվադեպ գրել SQL հայտարարություններ իրենց կոդի վերաբերյալ, և այդ գործիքները հաճույքով օգտագործում են պարամետրացված հայտարարություններ գլխարկի տակ:

def current_user (էլ.)

# «Օգտվող» օբյեկտը Active Record օբյեկտ է, որը պետք է գտնի մեթոդներ

# ավտոմատ կերպով ստեղծվել է Rails-ի կողմից:

User.find_by_email (էլ.փոստ)

Վերջ

Վերոնշյալ կոդը կփրկի ձեզ SQL ներարկումներից կամ հաքերային հարձակումներից:

Կոդավորված տվյալների բազա

Մեկ այլ պարզ մեթոդ՝ ձեր SQL տվյալների բազայի ներարկումներից կանխելու համար, կոդավորված տվյալների բազան կամ տվյալները են: Այսպիսով, սովորաբար պահեք ձեր տվյալների բազայի հավատարմագրերը առանձին զեկույցում և ապահով գաղտնագրեք այն, որպեսզի համոզվեք, որ հարձակվողները չեն կարող շատ օգուտ քաղել: