解析php安全性问题中的:Null 字符问题


Posted in PHP onJune 21, 2013

由于 PHP 的文件系统操作是基于 C 语言的函数的,所以它可能会以您意想不到的方式处理 Null 字符。 Null字符在 C 语言中用于标识字符串结束,一个完整的字符串是从其开头到遇见 Null 字符为止。 以下代码演示了类似的攻击:
Example #1 会被 Null 字符问题攻击的代码

<?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
}
?>

因此,任何用于操作文件系统的字符串(译注:特别是程序外部输入的字符串)都必须经过适当的检查。以下是上述例子的改进版本:
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';
}
?>

一个函数错误就可能暴露系统正在使用的数据库,或者为攻击者提供有关网页、程序或设计方面的有用信息。攻击者往往会顺藤摸瓜地找到开放的数据库端口,以及页面上某些 bug 或弱点等。比如说,攻击者可以一些不正常的数据使程序出错,来探测脚本中认证的顺序(通过错误提示的行号数字)以及脚本中其它位置可能泄露的信息。

一个文件系统或者 PHP 的错误就会暴露 web服务器具有什么权限,以及文件在服务器上的组织结构。开发者自己写的错误代码会加剧此问题,导致泄漏了原本隐藏的信息。

有三个常用的办法处理这些问题。第一个是彻底地检查所有函数,并尝试弥补大多数错误。第二个是对在线系统彻底关闭错误报告。第三个是使用 PHP 自定义的错误处理函数创建自己的错误处理机制。根据不同的安全策略,三种方法可能都适用。

PHP 相关文章推荐
用session做客户验证时的注意事项
Oct 09 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP写MySQL数据 实现代码
Jun 15 PHP
用php获取本周,上周,本月,上月,本季度日期的代码
Aug 05 PHP
用PHP生成excel文件到指定目录
Jun 22 PHP
php使用curl详细解析及问题汇总
Aug 11 PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 PHP
php中preg_replace正则替换用法分析【一次替换多个值】
Jan 17 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
Apr 27 PHP
php 数组元素快速去重
May 05 PHP
php表单文件iframe异步上传实例讲解
Jul 26 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
Apr 09 PHP
浅析SVN常见问题及解决方法
Jun 21 #PHP
关于svn冲突的解决方法
Jun 21 #PHP
关于PHP模板Smarty的初级使用方法以及心得分享
Jun 21 #PHP
解析关于wamp启动是80端口被占用的问题
Jun 21 #PHP
解析PHP中DIRECTORY_SEPARATOR,PATH_SEPARATOR两个常量的作用
Jun 21 #PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 #PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 #PHP
You might like
检查php文件中是否含有bom的函数
2012/05/31 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
yii2.0实现创建简单widgets示例
2016/07/18 PHP
PHP实现登录注册之BootStrap表单功能
2017/09/03 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JS实现跟随鼠标闪烁转动色块的方法
2015/02/26 Javascript
原生JS实现LOADING效果
2015/03/16 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
jQuery控制控件文本的长度的操作方法
2016/12/05 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
2017/04/10 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python 实现取多维数组第n维的前几位
2019/11/26 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
如何使用repr调试python程序
2020/02/28 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
HTML5 在canvas中绘制矩形附效果图
2014/06/23 HTML / CSS
营业员演讲稿
2013/12/30 职场文书
留学推荐信怎么写
2014/01/25 职场文书
后勤服务中心总经理工作职责
2014/03/03 职场文书
给老师的一封建议书
2014/03/13 职场文书
对教师的评语
2014/04/28 职场文书
民主生活会对照检查材料思想汇报
2014/09/27 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
idea以任意顺序debug多线程程序的具体用法
2021/08/30 Java/Android