由于 php 的文件系统操作是基于 c 语言的函数的,所以它可能会以您意想不到的方式处理 null 字符。 null字符在 c 语言中用于标识字符串结束,一个完整的字符串是从其开头到遇见 null 字符为止。 以下代码演示了类似的攻击:
Example #1 会被 Null 字符问题攻击的代码
<?php
$file = $_GET['file']; // "../../etc/passwd\0"
if (file_exists('/home/wwwrun/'.$file.'.php')) {
// 文件/home/wwwrun/../../etc/passwd存在的话那么file_exists方法会返回true
include '/home/wwwrun/'.$file.'.php';
// the file /etc/passwd will be included
}
?>因此,任何用于操作文件系统的字符串(特别是程序外部输入的字符串)都必须经过适当的检查。以下是上述例子的改进版本:
简介PHP轻论坛是一个简单易用的PHP论坛程序,适合小型社区和个人网站使用。v3.0版本是完全重构的版本,解决了之前版本中的所有已知问题,特别是MySQL保留字冲突问题。主要特点• 简单易用:简洁的界面,易于安装和使用• 响应式设计:适配各种设备,包括手机和平板• 安全可靠:避免使用MySQL保留字,防止SQL注入• 功能完善:支持分类、主题、回复、用户管理等基本功能• 易于扩展:模块化设计,便于
21
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';
}
?>
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号