Veilige scripts schrijven

Soorten scripts

Scripts zijn niet alleen leuk, ze zijn ook erg handig. De meeste administratieve taken op een systeem (backups, logs verwerken) kunnen geimplementeerd worden door middel van een script. Er zijn een paar variaties van scripts, waarbij de bekendste shell- en perlscripts zijn. Deze scripts wonen rustig in je systeem, totdat ze aangeroepen worden. Als dat gebeurt, wordt de script-interpreter gestart (bash, perl) en wordt het script aan de interpreter gevoerd. Alle commando's in het script worden hierdoor uitgevoerd.

Verder zijn er nog scripts die op een webserver draaien. Zodra je een bepaalde pagina opvraagt worden ze opgestart. Ze worden ofwel gewoon door de interpreter uitgevoerd, zoals hierboven is uitgelegd, of ze worden door de webserver uitgevoerd. Scripts die aan te roepen zijn via een webpagina worden CGI scripts genoemd. Overigens zijn ook gewone programma's aan te roepen via een webpagina.

Veiligheid van scripts

Een script wat je uitvoert vanaf de CLI heeft vaak geen veiligheidsgaten, omdat het zo simpel opgezet is. Zeker als je script onder een normaal gebruikersaccount (dus niet als root) wordt uitgevoerd, zal het veiligheidsrisico nihil zijn. Toch kennen zulke scripts ook gaten in de beveiliging, zoals symlink-attacks of kritieke races.

Een script wat uitgevoerd wordt door de webserver is veel gevaarlijker, omdat er interactie moet zijn tussen de websitebezoeker en het programma. De websitebezoeker kan een goedaardige meneer zijn die alleen uw website wilt bezoeken, maar het kan net zo goed iemand zijn met minder goede bedoelingen.

Om u te wapenen tegen slecht geschreven scripts zal ik hier een poging doen uit te leggen wat er mis kan gaan bij het schrijven van een script. Het eerste deel gaat over alle scripts, verderop worden de gaten die specifiek zijn voor CGI scripts behandeld.