Kā starptautisks standarta datu bāzes vaicājuma paziņojums, SQL priekšraksti ir plaši izmantoti dažādās programmēšanas vidēs. Kā nobriedusi un stabila sistēma lietotāja pieteikšanās un paroles verifikācija ir būtiska. Manā ikdienas programmēšanas darbā es atklāju, ka daudzi programmētāji izmanto SQL paziņojumus, lai pārbaudītu lietotāju paroles, izmantojot šādu paziņojumu:
sql="Izvēlieties * no lietotāja tabulas, kur name='"+name+"' un password='"+password+"'"
Vārds un parole ir lietotāja ievadītie lietotājvārdi un paroles, un iepriekš minētie paziņojumi tiek izpildīti, lai pārbaudītu, vai lietotājs un parole ir likumīgi un derīgi. Tomēr, veicot analīzi, var konstatēt, ka iepriekš minētajos apgalvojumos ir letālas nepilnības. Kad lietotājvārdā ievadām šādu virkni: 111'vai'1=1, pēc tam nejauši ievadiet paroli, mēs to iestatījām uz aaaa. Pēc mainīgā nomaiņas SQL priekšraksts kļūst par šādu virkni:
sql="Izvēlieties * no lietotāja tabulas, kur name='111'vai'1=1' un password='aaaa'
Mēs visi zinām, ka, kad atlases paziņojums vērtē vaicājuma nosacījumus, tas ignorēs šādas un (un) darbības, saskaroties ar (vai) operācijām, un vērtība 1=1 iepriekš minētajā paziņojumā vienmēr ir patiesa, kas nozīmē, ka neatkarīgi no tā, kāda vērtība ir ievadīta parolē, tā var iziet iepriekš minēto paroles pārbaudi! Šīs problēmas risinājums ir ļoti vienkāršs, un ir daudz metožu, visbiežāk izmantotā ir spriest par lietotāja un paroles likumību pirms pārbaudes veikšanas, un īpašas rakstzīmes, piemēram, pēdiņas un vienādības zīmes, nav atļautas.
Iepriekš minētās problēmas, lai gan tās var šķist vienkāršas, pastāv. Piemēram, slavenās tiešsaistes spēles "Smiling Proud Jianghu" agrīnajai versijai internetā bija šāda problēma, un autors arī rūpīgi analizēja dažas programmas, kuras viņš bija rakstījis pirms tam, kad izlasīja ievainojamības ziņojumu par šo spēli, un bija daudz šādu nepilnību. Tam patiešām vajadzētu būt mūsu uzmanībai. Tas arī atklāj jauno programmētāju, tostarp autora, programmēšanas pieredzes un drošības izpratnes trūkumu. Tajā pašā laikā tas arī atgādina, ka programmētājiem, izstrādājot programmu, pilnībā jāapsver programmas drošība, un tiem nevajadzētu būt aplietiem, un šķietami neliels izlaidums var izraisīt nopietnas sekas.
|