Problem relaterade till null-byte

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök

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

Säkerhet


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.