PHP.mk документација

Проблеми поврзани со Null бајти

Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.

security.filesystem.nullbytes.php PHP.net прокси Преводот е вчитан
Оригинал на PHP.net
Патека security.filesystem.nullbytes.php Локална патека за оваа страница.
Извор php.net/manual/en Оригиналниот HTML се реупотребува и локално се стилизира.
Режим Прокси + преведен приказ Кодовите, табелите и белешките остануваат читливи во истиот тек.
Проблеми поврзани со Null бајти

Референца за `security.filesystem.nullbytes.php` со подобрена типографија и навигација.

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 забелешки

Анонимен
12 години пред
Looks like this issue was fixed in PHP 5.3 https://bugs.php.net/bug.php?id=39863
Пример #2 Правилно валидирање на влезот
пред 11 години
clean input of null bytes:

<?php
$clean = str_replace(chr(0), '', $input);
?>
Навигација

Прелистувај сродни теми и функции.

На оваа страница

Автоматски outline од активната документација.

Насловите ќе се појават тука по вчитување.

Попрегледно читање

Примерите, changelog табелите и user notes се визуелно издвоени за да не се губат во долгата содржина.

Брз совет Користи го outline-от Скокни директно на главните секции од активната страница.
Извор Оригиналниот линк останува достапен Кога ти треба целосен upstream context, отвори го PHP.net во нов tab.