Looks like this issue was fixed in PHP 5.3 https://bugs.php.net/bug.php?id=39863Проблеми поврзани со Null бајти
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Проблеми поврзани со Null бајти
Референца за `security.filesystem.nullbytes.php` со подобрена типографија и навигација.
Проблеми поврзани со Null бајти
за листа на сите овие функции и соодветните PHP ги користи основните C функции за операции поврзани со датотечниот систем, може да ракува со нулти бајти на прилично неочекуван начин. Бидејќи нултите бајти го означуваат крајот на низата во C, низите што ги содржат нема да се сметаат целосно, туку само додека не се појави нулти бајт. Следниот пример покажува ранлив код што го демонстрира овој проблем:
ги користи основните C функции за операции поврзани со датотечниот систем, може да ракува со нулти бајти на прилично неочекуван начин. Бидејќи нултите бајти го означуваат крајот на низата во C, низите што ги содржат нема да се сметаат целосно, туку само додека не се појави нулти бајт. Следниот пример покажува ранлив код што го демонстрира овој проблем:
<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/' . $file . '.php')) {
// File_exists will return true as the file /home/wwwrun/../../etc/passwd exists
include '/home/wwwrun/' . $file . '.php';
// The file /etc/passwd will be included
}
?>Пример #1 Скрипта ранлива на нулти бајти
Затоа, секоја „tainted“ низа што се користи во операција на датотечниот систем секогаш треба правилно да се валидира. Еве подобра верзија на претходниот пример:
<?php
$file = $_GET['file'];
// Whitelisting possible values
switch ($file) {
case 'main':
case 'foo':
case 'bar':
include '/home/wwwrun/include/' . $file . '.php';
break;
default:
include '/home/wwwrun/include/main.php';
}
?>Белешки од корисници 2 забелешки
clean input of null bytes:
<?php
$clean = str_replace(chr(0), '', $input);
?>