解析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 mvc开发模式的感想
Jun 28 PHP
PHP设计模式之调解者模式的深入解析
Jun 13 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
php的慢速日志引起的Mysql错误问题分析
May 13 PHP
php验证session无效的解决方法
Nov 04 PHP
PHP生成随机数的方法实例分析
Jan 22 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP MVC框架skymvc支持多文件上传
May 26 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
50个优秀经典PHP算法大集合 附源码
Aug 26 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调用c接口无错版介绍
2014/03/11 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
Add a Table to a Word Document
2007/06/15 Javascript
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
图片动画横条广告带上下滚动可自定义图片、链接等等
2013/10/20 Javascript
jQuery中用dom操作替代正则表达式
2014/12/29 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
微信小程序实现页面跳转传值的方法
2017/10/12 Javascript
详解node.js中的npm和webpack配置方法
2018/01/21 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
如何通过shell脚本自动生成vue文件详解
2019/09/10 Javascript
使用axios请求接口,几种content-type的区别详解
2019/10/29 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
在Vue中使用Select选择器拼接label的操作
2020/10/22 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
使用Anaconda3建立虚拟独立的python2.7环境方法
2018/06/11 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
2018/09/13 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
美国最大的购物网站:Amazon.com(亚马逊美国)
2020/05/23 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
新农村建设典型材料
2014/05/31 职场文书
企业总经理助理岗位职责
2014/09/12 职场文书
预备党员对照检查材料思想汇报
2014/09/24 职场文书
银行工作心得体会范文
2016/01/23 职场文书
公证书
2019/04/17 职场文书