首页 > PHP > PHP 5.3.4及以上版本永久性地解决文件名NULL(\0)字符截断的问题

PHP 5.3.4及以上版本永久性地解决文件名NULL(\0)字符截断的问题

来源:原创 作者:thomas 分类:PHP 阅读:894 日期:2014-05-20
十日谈技术博客

原理:

PHP内核是由C语言来实现的,因此PHP中很多非“二进制安全”的字符串处理函数(如:strcoll(),)是使用了C语言中的字符串处理函数。在连接字符串时,0字节(\0)将被作为字符串结束符。

示例:

<?php

$filename = "/var/www/html/".$_GET['name'].".php";  // "../../../etc/passwd\0"

include($filename);

结果:

浏览器输入框中输入:http://192.168.56.101/index.php?name=../../../etc/passwd%00 可看到linux用户文件被爆出来了。

如何解决:

1,尽量不让用户通过输入控制filename。

2,如果filename由用户输入控制,可使用str_replace("\0", '', $value);进行滤除。

3,PHP5.3.4以上版本已彻底解决了文件名空字节截断问题。

 

热门文章 更多>

微信扫一扫,关注技术十日谈