Vuoden 2017 OWASP-listan turvallisuusuhkien TOP 10 –listassa ykkösenä on edelleen Injektio (Injection), joka voidaan kohdistaa esimerkiksi SQL-tietokantaan tai JavaScript-koodia käyttäen HTML-lomakkeiden syötteen kautta. Kehittelin Python –skriptin, jonka avulla voi torjua ohjelmallisesti SQL-injektio-hyökkäyksen ilman tarvetta luoda valkoista, tai –mustaa listaa (Whitelist, Blacklist) syötteistä, se kun lienee jopa mahdotonta rajata kaikkia vaihtoehtoja pois ainakaan mahdotonta on luoda musta lista, joten valkoinen lista toimii useimmiten paremmin. Google varmaan hakulomakkeen syötteen prosessoinnissa käyttää molempia.
Pistin koodin Python-kansioon Github-profiiliini. Homman idea on se, että skriptissä prosessoidaan HTML-lomakkeen syöte siten, että ensin kaikista syötteen välilyönnillä erotetuista merkkijonoista luodaan taulukko, jonka jälkeen ne yhdistetään String-metodilla ””.join(formInput) –metodilla yhdeksi merkkijonokoksi lisäten väliin merkkijonon “”, eli tyhjän ja vieläpä siten, että kaikki merkit voidaan vielä muuttaa pieniksi kirjaimiksi, niin ei ainakaan JavaScript –koodillakaan pääse kokeneempi red-hat –hakkeri tai joku skriptikakara (Script Kid) murtautumaan järjestelmään. Niin kuin entinen ala-aste –luokkani luokanvalvoja koulun rehtori Unto Nieminen totesi, että ”Kaikki menee samaan ”hevoshalpasuomilenkki-makkaraksi” puhuessaan suomen kielen lauseopista. Tässä välissä paljastan, että itsekin aloitin 14-vuotiaana Pimeässä Internetissä nimenomaan Skriptikakarana vuonna 1997-1998 tienoilla.
Artikkelin linkit:
Minkälaisia hyökkäyksiä tämä estää? Eikös syötteessä kuulu yleensä ollakin välilyöntejä, kuten esim tässä kommentissa? Eikös tämä tekis vähän saman: forminput.replace(‘ ‘, ”).lower() ?
SQL Injektiohyökkäyksessä pahaa tarkoittavan hyökkääjän tavoite on kohdistaa haittakoodia SQL-tietokantaan, ja jos esimerkiksi tietokannassa on käyttäjätietoja, varastaa ne mitä oletettavammin. Ainakaan tuohon Palindromikoneeseeni ei pysty kohdistamaan SQL-haittakoodia, vaikka joku saisikin cracakttua tietokannan salasanan.
Ok, tämä selvä. Palindromikoneessa varmaan toimii. Käyttäisitkö tätä muidenkin inputtien muuttamiseen?
No lopullisessa tulosteessa ei olisi kait pakko muuttaa, vain siinä vaiheessa, kun käyttäjä lähettää lomakkeen tiedot verkon yli? No miksen käyttäisi, toimiihan se.