Problem relaterade till null-byte
Problem relaterade till null-bytes
Eftersom PHP använder underliggande C-funktioner för filsystemrelaterade operationer, kan det hantera null-bytes på ett ganska oväntat sätt. Eftersom null-bytes markerar slutet på en sträng i C, kommer strängar som innehåller dem inte att betraktas i sin helhet utan endast fram till att en null-byte uppträder. Följande exempel visar en sårbar kod som demonstrerar detta problem:
Exempel #1 Skript sårbart för null-bytes
<?php $file = $_GET['file']; // "../../etc/passwd\0" if (file_exists('/home/wwwrun/' . $file . '.php')) { // File_exists kommer att returnera true eftersom filen /home/wwwrun/../../etc/passwd finns include '/home/wwwrun/' . $file . '.php'; // Filen /etc/passwd kommer att inkluderas } ?>
Därför bör varje förorenad sträng som används i en filsystemoperation alltid valideras korrekt. Här är en bättre version av föregående exempel:
Exempel #2 Korrekt validering av indata
<?php $file = $_GET['file']; // Whitelist av möjliga värden switch ($file) { case 'main': case 'foo': case 'bar': include '/home/wwwrun/include/' . $file . '.php'; break; default: include '/home/wwwrun/include/main.php'; } ?>
Sidslut
Orginalhemsidan på Engelska :https://www.php.net/manual/en/security.filesystem.nullbytes.php
PHP
Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till Datorhjälp som har sponsrat Linux.se med webserver.