php—Null字符问题
程序员文章站
2022-04-28 19:57:28
...
由于 PHP 的文件系统操作是基于 C 语言的函数的,所以它可能会以您意想不到的方式处理 Null 字符。 Null字符在 C 语言中用于标识字符串结束,一个完整的字符串是从其开头到遇见 Null 字符为止。 以下代码演示了类似的攻击:
Example #1 会被 Null 字符问题攻击的代码
<?php $file = $_GET['file']; // "../../etc/passwd\0" if (file_exists('/home/wwwrun/'.$file.'.php')) { // 文件/home/wwwrun/../../etc/passwd存在的话那么file_exists方法会返回true include '/home/wwwrun/'.$file.'.php'; // the file /etc/passwd will be included } ?>
因此,任何用于操作文件系统的字符串(特别是程序外部输入的字符串)都必须经过适当的检查。以下是上述例子的改进版本:
Example #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'; } ?>
推荐阅读
-
针对PHP开发安全问题的相关总结
-
基于tomcat8 编写字符编码Filter过滤器无效问题的解决方法
-
mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
-
完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题
-
PHP使用PDO操作数据库的乱码问题解决方法
-
解决mybatis使用char类型字段查询oracle数据库时结果返回null问题
-
iOS中lebel特殊字符的自动换行问题解决
-
PHP中file_exists使用中遇到的问题小结
-
PHP版本的选择5.2.17 5.3.27 5.3.28 5.4 5.5兼容性问题分析
-
PHP使用http_build_query()构造URL字符串的方法