Fejl i PHP kan være sikkerhedsrisiko

Artiklen blev oprindeligt publiceret den 12/5/2015

En funktion i PHP kan fejlagtigt svare, at to tekster er ens, selvom de er forskellige. Det kan muligvis udnyttes til angreb.

Problemet ligger i sammenligningsfunktionerne == (er lig med) og != (er ikke lig med). Hvis man bruger dem på en tekststreng, der begynder med ”0e”, og hvor alle de øvrige tegn er tal, vil PHP opfatte den som et tal med værdien 0. Dermed vil to forskellige tekster, der begynder med ”0e”, blive opfattet som værende ens.

Det kan give problemer, når man bruger hashværdier for passwords. Hvis hashværdien af et password begynder med ”0e”, vil et andet password, hvis hashværdi også gør det, blive set som det samme. Dermed vil et forkert password kunne give uvedkommende adgang til et system.

I praksis kan det blive svært at udnytte fejlen til angreb, da der er ganske få mulige tekster, der giver hashværdier, der opfylder kriterierne.

Anbefaling
Hvis man vil undgå risikoen, skal man bruge funktionerne === eller !== i stedet for henholdsvis == og !=.

Links