解析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 09 PHP
一个用php实现的获取URL信息的类
Jan 02 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
php实现插入排序
Mar 29 PHP
CI映射(加载)数据到view层的方法
Mar 28 PHP
PHP简单实现无限级分类的方法
May 13 PHP
PHP实现JS中escape与unescape的方法
Jul 11 PHP
如何使用php等比例缩放图片
Oct 12 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
Dec 07 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP大文件切割上传功能实例分析
Jul 01 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
php 字符串压缩方法比较示例
2014/01/23 PHP
php多任务程序实例解析
2014/07/19 PHP
php输出金字塔的2种实现方法
2014/12/16 PHP
JavaScript 全面解析各种浏览器网页中的JS 执行顺序
2009/02/17 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
JQuery 在文档中查找指定name的元素并移除的实现方法
2016/05/19 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
vue代理和跨域问题的解决
2018/07/18 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
vue实现自定义多选按钮
2020/07/16 Javascript
vue 判断页面是首次进入还是再次刷新的实例
2020/11/05 Javascript
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[01:13]这,就是刀塔
2014/07/16 DOTA
python中dir函数用法分析
2015/04/17 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Python使用itchat 功能分析微信好友性别和位置
2019/08/05 Python
css3实现的下拉菜单效果示例
2014/01/22 HTML / CSS
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
大学生职业生涯规划范文
2014/01/08 职场文书
2015年元旦活动总结
2014/05/09 职场文书
房地产活动策划方案
2014/05/14 职场文书
创先争优标语
2014/06/27 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
电影圆明园观后感
2015/06/03 职场文书