PHP安全之文件系统安全——Null字符问题
由于 PHP 的文件系统操作是基于 C 语言的函数的,所以它可能会以您意想不到的方式处理 Null 字符。 Null字符在 C 语言中用于标识字符串结束,一个完整的字符串是从其开头到遇见 Null 字符为止。 以下代码演示了类似的攻击:
Example #1 会被 Null 字符问题攻击的代码
<?php $file = $_GET[’file’]; // '../../etc/passwd0' if (file_exists(’/home/wwwrun/’.$file.’.php’)) {// 文件/home/wwwrun/../../etc/passwd存在的话那么file_exists方法会返回trueinclude ’/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’; }?>
相关文章:
1. JXTA Java标准版本 2.3.7 发布2. JS实现手写 forEach算法示例3. PHP设计模式之迭代器模式浅析4. 用css截取字符的几种方法详解(css排版隐藏溢出文本)5. Spring FreeMarker整合Struts2过程详解6. Android Studio3.6新特性之视图绑定ViewBinding使用指南7. Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)8. python b站视频下载的五种版本9. ASP.NET MVC使用正则表达式验证手机号码10. vue学习笔记之slot插槽用法实例分析

网公网安备