解析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 相关文章推荐
PHP 日期时间函数的高级应用技巧
Oct 10 PHP
php 魔术函数使用说明
Feb 21 PHP
PHP stream_context_create()作用和用法分析
Mar 29 PHP
php懒人函数 自动添加数据
Jun 28 PHP
关于php连接mssql:pdo odbc sql server
Jul 20 PHP
php启动时候提示PHP startup的解决方法
May 07 PHP
php实现下载限制速度示例分享
Feb 13 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
Aug 20 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
PHP检测用户语言的方法
Jun 15 PHP
CI框架扩展系统核心类的方法分析
May 23 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 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 如何获取数组第一个值
2013/08/06 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
Laravel5.1 框架路由基础详解
2020/01/04 PHP
onpropertypchange
2006/07/01 Javascript
Prototype使用指南之hash.js
2007/01/10 Javascript
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
JS中的this变量的使用介绍
2013/10/21 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
2016/07/20 Javascript
js实现下拉框效果(select)
2017/03/28 Javascript
bootstrap表单示例代码分享
2017/05/18 Javascript
React Native如何消除启动时白屏的方法
2017/08/08 Javascript
jQuery中extend函数简单用法示例
2017/10/11 jQuery
浅谈react 同构之样式直出
2017/11/07 Javascript
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
Python 忽略warning的输出方法
2018/10/18 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python代码实现http/https代理服务器的脚本
2019/08/12 Python
python 实现视频 图像帧提取
2019/12/10 Python
Django Xadmin多对多字段过滤实例
2020/04/07 Python
python相对企业语言优势在哪
2020/06/12 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
2020/12/04 Python
工作中个人的自我评价
2013/12/31 职场文书
端午节演讲稿
2014/05/23 职场文书
个人综合鉴定材料
2014/05/23 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
兵马俑导游词
2015/02/02 职场文书
小马王观后感
2015/06/11 职场文书