Wietse Venema, die bezig is met het implementeren van taint ondersteuning in PHP, heeft van het weekend een eerste testversie van zijn werk beschikbaar gesteld:
This is a preliminary implementation of support for tainted variables
in PHP. The goal is to help PHP application programmers find and
eliminate opportunities for HTML script injection, SQL or shell
code injection, or PHP control hijacking, before other people can
exploit them.
Het idee van taint mode in PHP is simpel. Gegevens die "van buiten" komen worden aangemerkt als onveilig. Om deze gegevens te kunnen gebruiken zul je eerst een passende zogenaamde "untaint" functie moeten loslaten op deze gegevens. Zo zul je, voordat je een veld uit een formulier kunt gebruiken in een database query eerst een functie als mysql_real_escape_string() moeten aanroepen om deze gegevens te "untainten" (veilig te maken), en zul je voordat je een veld uit de database kunt weergeven op een pagina eerst de functie htmlspecialchars() or htmlentities() moeten gebruiken.
Aangezien allerlei functies zich bewust moeten worden van het feit dat een variabele veilig of niet veilig kan zijn, zijn nog niet alle functies in PHP in staat om om te gaan met de taint mode die Venema heeft geimplementeerd.
However, the implementation is incomplete, so please don't be
surprised when something is still missing. For example, I have not
yet implemented taint support for object-specific operations, and
taint checks assume that output has a Content-Type: of text/html.
In de README die Venema meelevert beschrijft hij welke functies hij al wel heeft aangepakt.
Venema is nu veelal op zoek naar feedback, zowel op functioneel vlak als performance vlak. Dus als je het gaat testen en je komt iets speciaals tegen, of je hebt een suggestie. Laat het hem vooral weten. Zijn emailadres kun je vinden via de posting op news.php.net.
De taint implementatie loopt iets achter op PHP zelf en is gebaseerd op PHP 5.2.3. Je kunt of een Diff of een volledig gepatchte tarball van de PHP source code downloaden. Windows gebruikers hebben, tenzij ze zelf een Windows versie kunnen bakken, nog even pech.