Todo sovelluksella demonstroidaan miten sovellus on haavoittuvainen SQL-injektioille. Sovellusta parannetaan eriversiossa, ettei SQL-injektiot olisi enään mahdollisia.
Ensimmäisessä versiossa sovellus on SQL-injektoituva. Sovelluksen DAO-luokissa käytetään Javan Statement-rajapintaa. Tietokantaan tallennetuissa procedureissa käytetään EXECUTE-komentoa ja parametrit asetetaan SQL-lauseeseen suoraan
k.tunnus = ’’’ || input_tunnus || ’’’
Toisessa versiossa sovelluksen Java DAO-luokkiin on Javan Statement-rajapinnan tilalle vaihdettu PreparedStatement-rajapinta tilanteissa, joissa asetetaan muuttujia SQL-lauseeseen.
Kolmannessa versiossa on muutettu DefaultController luokan createNewUser(..) metodia, johon lisätty tulevian tietojen tarkistusta. Lisätty myös ApiController luokan todoSearchById(..) metodiin try catch lohko tulevan parametrin merkkijonon muunnos long muotoon, ettei virhettä lokiteta.
Neljännessä versiossa on muutettu tietokannan luo_kayttaja(..) procedure metodia, ettei ajeta EXECUTE-komentoa ja parametrejä ei asetata suoraan SQL-lauseeseen.
Viidennessä versiossa on palautettu takaisin kolmennessa versiossa tehty muutos DefaultController luokkaan.