Kot mednarodna standardna poizvedba v podatkovnih bazah so SQL stavki široko uporabljeni v različnih programskih okoljih. Kot zrel in stabilen sistem sta uporabniška prijava in preverjanje gesel ključna. Pri svojem vsakodnevnem programerskem delu sem ugotovil, da mnogi programerji uporabljajo SQL stavke za preverjanje uporabniških gesel s takšnimi izjavami:
sql="Izberi * iz uporabniške tabele, kjer ime='"+ime+"' in geslo='"+password+"'"
Ime in geslo sta uporabniška imena in gesla, ki jih uporabnik vnese, zgornje izjave pa se izvajajo za preverjanje, ali sta uporabnik in geslo legitimna in veljavna oseba. Vendar pa je z analizo mogoče ugotoviti, da so v zgornjih izjavah usodne luknje. Ko v uporabniško ime vnesemo naslednji niz: 111'or'1=1, nato pa geslo vnesemo mimogrede, ga nastavimo na aaaa. Po zamenjavi spremenljivke SQL izjava postane naslednji niz:
sql="Izberite * iz uporabniške tabele, kjer ime='111'or'1=1' in geslo='aaaa'
Vsi vemo, da ko stavek select presodi pogoje poizvedbe, bo ob srečanju z or (ali) operacijami ignoriral naslednje in (and), vrednost 1=1 v zgornji izjavi pa je vedno resnična, kar pomeni, da ne glede na vrednost, ki je vnesena v geslo, lahko prestane zgornjo preverjanje gesla! Rešitev tega problema je zelo preprosta in obstaja veliko metod, najpogosteje uporabljena je presoja legitimnosti uporabnika in vnesenega gesla pred izvedbo preverjanja, posebni znaki, kot so enojni narekovaji in enaki, pa niso dovoljeni.
Zgornje težave, čeprav se morda zdijo preproste, vseeno obstajajo. Na primer, zgodnja različica znamenite spletne igre "Smiling Proud Jianghu" na internetu je imela tak problem, avtor pa je po branju poročila o ranljivosti te igre skrbno analiziral nekatere programe, ki jih je prej napisal, in bilo je veliko takšnih lukenj. To bi res morala biti naša pozornost. To prav tako razkriva pomanjkanje programerskih izkušenj in varnostne ozaveščenosti mladih programerjev, vključno z avtorjem. Hkrati pa nas opominja, da morajo programerji pri načrtovanju programa temeljito upoštevati varnost programa in ne smejo biti malomarni, saj lahko že majhna izpustitev povzroči resne posledice.
|