Բոլորը գիտեն, որ տեխնոլոգիաների առաջխաղացման հետ մեկտեղ անվտանգությունը յուրաքանչյուր բիզնեսի և սոցիալական մեդիայի հարթակի հիմնական և կարևոր հատկանիշն է: Գրեթե բոլոր բիզնեսները փոխանցում են իրենց բիզնեսի տվյալները, այս տվյալները պահում են տվյալների շտեմարաններում: Այսպիսով, 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 և պատրաստված հարցումներ:
($conn-ը PDO օբյեկտ է)
$stmt = $conn -> պատրաստել (‘ INSERT INTO tbl VALUES ( :Id , :name ) ‘ );
$stmt -> bindValue ( ‘ :id ‘ , $id );
$stmt -> bindValue(‘ :name ‘ , $name ) ;
$stmt -> execute( );
Պատրաստված հայտարարությունները ճկուն են SQL ներարկման նկատմամբ, քանի որ այն փաստի պարամետրի արժեքները, որոնք հետագայում փոխանցվում են եզակի արձանագրության օգտագործմամբ, այժմ պետք չէ հաջողությամբ փախչել: Եթե հայտարարագրի բնօրինակ ձևանմուշը չի ստացվել արտաքին մուտքից, SQL ներարկումը չի կարող առաջանալ:
Մշակող շատ թիմեր ընտրում են օգտագործել Object Relational Mapping (ORM) շրջանակները՝ SQL արդյունքի միավորների թարգմանությունը կոդի օբյեկտների լրացուցիչ անխափան դարձնելու համար: ORM գործիքները հաճախ առաջարկում են մշակողներին հազվադեպ գրել SQL հայտարարություններ իրենց կոդի վերաբերյալ, և այդ գործիքները հաճույքով օգտագործում են պարամետրացված հայտարարություններ գլխարկի տակ:
def current_user (էլ.)
# «Օգտվող» օբյեկտը Active Record օբյեկտ է, որը պետք է գտնի մեթոդներ
# ավտոմատ կերպով ստեղծվել է Rails-ի կողմից:
User.find_by_email (էլ.փոստ)
Վերջ
Վերոնշյալ կոդը կփրկի ձեզ SQL ներարկումներից կամ հաքերային հարձակումներից:
Մեկ այլ պարզ մեթոդ՝ ձեր SQL տվյալների բազայի ներարկումներից կանխելու համար, կոդավորված տվյալների բազան կամ տվյալները են: Այսպիսով, սովորաբար պահեք ձեր տվյալների բազայի հավատարմագրերը առանձին զեկույցում և ապահով գաղտնագրեք այն, որպեսզի համոզվեք, որ հարձակվողները չեն կարող շատ օգուտ քաղել: