downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

Seguridad de Bases de Datos> <Seguridad del Sistema de Archivos
[edit] Last updated: Fri, 17 May 2013

view this page in

Cuestiones relacionadas a bytes nulos

Como PHP utiliza las funciones de C para operaciones relacionadas al sistema de archivos, se podría manejar bytes nulos de manera bastante inesperada. Como un byte nulo denota el fin de una cadena en C, las cadenas que contengan estos no serán consideradas por completo, sino sólo hasta que ocurra un byte nulo. El siguiente ejemplo muestra un código vulnerable que presenta este problema:

Ejemplo #1 Script vulnerable a bytes nulos

<?php
$file 
$_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
    
// file_exists devolverá true si el archivo /home/wwwrun/../../etc/passwd existe
    
include '/home/wwwrun/'.$file.'.php';
    
// el archivo /etc/passwd se incluirá
}
?>

Por lo tanto, cualquier cadena que se utiliza en una operación de sistema de archivos siembre deben ser validados correctamente. He aquí una versión mejorada del ejemplo anterior:

Ejemplo #2 Validando correctamente la entrada

<?php
$file 
$_GET['file']; 

// Lista blanca de valores posibles
switch ($file) {
    case 
'main':
    case 
'foo':
    case 
'bar':
        include 
'/home/wwwrun/include/'.$file.'.php';
        break;
    default:
        include 
'/home/wwwrun/include/main.php';
}
?>


add a note add a note User Contributed Notes Cuestiones relacionadas a bytes nulos - [1 notes]
up
-3
kpobococ at gmail dot com
4 years ago
Since problems with null bytes do not stretch to regular string functions, this should be enough to ensure no GET parameter contains them any more:

<?php
function getVar($name)
{
   
$value = isset($_GET[$name]) ? $_GET[$name] : null;
   
    if (
is_string($value)) {
       
$value = str_replace("\0", '', $value);
    }
}
?>

Modifying this to work with other superglobals should not be a problem, so I will leave it up to you.

 
show source | credits | sitemap | contact | advertising | mirror sites