PHP 8.5.0 Beta 3 available for testing

Null ใƒใ‚คใƒˆ้–ข้€ฃใฎๅ•้กŒ

PHP ใฏใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ้–ข้€ฃใฎๆ“ไฝœใซ C ่จ€่ชžใฎ้–ขๆ•ฐใ‚’ไฝฟ็”จใ—ใฆใ„ใ‚‹ใฎใงใ€ null ใƒใ‚คใƒˆใฎๅ‡ฆ็†ใ‚’ไบˆๆœŸใ›ใฌใ‹ใŸใกใง่กŒใ†ใ“ใจใŒใ‚ใ‚Šใพใ™ใ€‚ C ่จ€่ชžใงใฏ null ใƒใ‚คใƒˆใฏๆ–‡ๅญ—ๅˆ—ใฎ็ต‚็ซฏใ‚’่กจใ™ใฎใงใ€ null ใƒใ‚คใƒˆใ‚’ๅซใ‚€ๆ–‡ๅญ—ๅˆ—ใŒใ‚ใฃใŸๅ ดๅˆใซ null ใƒใ‚คใƒˆไปฅ้™ใฎๅ†…ๅฎนใฏๆ–‡ๅญ—ๅˆ—ใจใ—ใฆๅ‡ฆ็†ใ•ใ‚Œใพใ›ใ‚“ใ€‚ ไปฅไธ‹ใซใ€ใ“ใฎๅ•้กŒใซ้–ขใ™ใ‚‹่„†ๅผฑๆ€งใ‚’ๅซใ‚€ใ‚ณใƒผใƒ‰ไพ‹ใ‚’็คบใ—ใพใ™ใ€‚

ไพ‹1 null ใƒใ‚คใƒˆใซๅฏพใ—ใฆ่„†ๅผฑใชใ‚นใ‚ฏใƒชใƒ—ใƒˆ

<?php
$file
= $_GET['file']; // ใ“ใ“ใง "../../etc/passwd\0" ใŒๆธกใ•ใ‚ŒใŸใจใ—ใพใ™

if (file_exists('/home/wwwrun/' . $file . '.php')) {
// file_exists ใฏ true ใ‚’่ฟ”ใ—ใพใ™ใ€‚ใ“ใ‚Œใฏใ€ใƒ•ใ‚กใ‚คใƒซ /home/wwwrun/../../etc/passwd ใŒๅญ˜ๅœจใ™ใ‚‹ใ‹ใ‚‰ใงใ™
include '/home/wwwrun/'.$file.'.php';

// ใƒ•ใ‚กใ‚คใƒซ /etc/passwd ใŒใ‚คใƒณใ‚ฏใƒซใƒผใƒ‰ใ•ใ‚Œใฆใ—ใพใ„ใพใ™

}

?>

ใ—ใŸใŒใฃใฆใ€ใƒ•ใ‚กใ‚คใƒซใ‚ทใ‚นใƒ†ใƒ ๆ“ไฝœใงไฝฟ็”จใ™ใ‚‹ใ€ŒๆฑšๆŸ“ใ•ใ‚ŒใŸใ€ๆ–‡ๅญ—ๅˆ—ใฏใ€ ใคใญใซ้ฉๅˆ‡ใซๆคœ่จผใ—ใชใ‘ใ‚Œใฐใชใ‚Šใพใ›ใ‚“ใ€‚ ๅ…ˆใปใฉใฎไพ‹ใ‚’ๆ”น่‰ฏใ—ใŸใ‚‚ใฎใ‚’็คบใ—ใพใ™ใ€‚

ไพ‹2 ๅ…ฅๅŠ›ใ‚’้ฉๅˆ‡ใซๆคœ่จผใ™ใ‚‹ไพ‹

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

// ๅ€คใจใ—ใฆไธŽใˆใ‚‰ใ‚Œใ‚‹ๅฏ่ƒฝๆ€งใฎใ‚ใ‚‹ใ€ๆœ‰ๅŠนใชๅ€คใฎไธ€่ฆงใ‚’ไฝœๆˆใ—ใพใ™
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

User Contributed Notes 2 notes

up
12
Anonymous ยถ
11 years ago
Looks like this issue was fixed in PHP 5.3 https://bugs.php.net/bug.php?id=39863
up
4
cornernote [at] gmail.com ยถ
10 years ago
clean input of null bytes:

<?php
$clean
= str_replace(chr(0), '', $input);
?>
To Top