weiphp移植PHP7.0过程

本文记录了将Weiphp框架移植到PHP7.0过程中遇到的三大问题及解决方案:1)simplexml_load_string()函数未定义,需安装simplexml扩展;2)Runtime/Cache目录权限不足,需设置为可写;3)MySQL的only_full_group_by模式导致的SQL错误,需调整sql_mode配置。详细解决步骤和参考资料已提供。

第一个坑

Call to undefined function Think\simplexml_load_string()

simplexml扩展包的问题,需要安装扩展包

sudo apt-get install php7.0-xml


第二个坑

_STORAGE_WRITE_ERROR_:./Runtime/Cache/Install

路径权限的问题,需要设置跟目录权限可写,这个错误是由于创建Runtime目录没有可写权限造成


第三个坑

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'wp_db.wp_material_news.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

出现这个错误的原因是mysql数据库里面默认将sql_mode增加了 only_full_group_by 的配置,导致无法使用group by来查询,关于sql_mode的相关介绍可以参考如下几个链接:

https://www.cnblogs.com/wangtao_20/archive/2011/02/22/1961795.html

http://blog.youkuaiyun.com/ccccalculator/article/details/70432123

http://blog.youkuaiyun.com/u014520745/article/details/76056170

使用如下命令在mysql的终端中查询sql_mode:

select @@sql_mode;

修改sql_mode是在配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf 中增加如下内容

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 

修改后查询结果为:

mysql> select @@sql_mode;
+------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                             |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)






<think>嗯,用户想了解Weiphp框架中的任意文件读取漏洞的原因和修复方案。首先,我需要回忆一下常见的文件读取漏洞通常是怎么产生的。比如,用户输入未经过滤直接传递给文件操作函数,可能导致路径穿越或者文件包含。 接下来,我应该检查Weiphp框架中是否存在这样的问题。根据之前的知识,这类漏洞可能在文件下载或读取功能模块中出现,特别是当使用参数如`file`或`filename`时没有正确验证路径。例如,攻击者可能通过构造`../../etc/passwd`这样的路径来访问系统文件。 然后,漏洞的原因可能包括未校验用户输入的合法性,允许绝对路径或路径穿越符号,以及未限制文件访问范围。修复方案通常涉及白名单验证、过滤危险字符、限制文件目录等。另外,框架本身是否有安全更新也需要考虑,比如官方是否发布了补丁。 还要确保回答中引用相关的参考资料,比如提到的Web安全学习笔记中的内容,以增加可信度。最后,生成的相关问题需要围绕漏洞分析、修复步骤、代码审计方法以及框架对比展开,帮助用户深入理解。</think>### Weiphp框架任意文件读取漏洞分析 #### 漏洞原理 该漏洞通常出现在文件下载功能模块中,攻击者通过构造特殊路径参数实现越权读取服务器文件。常见触发点如: $$filepath = $_GET['file']; \quad readfile($filepath);$$ 未对`file`参数进行安全过滤时,攻击者可构造`?file=../../etc/passwd`实现路径穿越[^1]。 #### 漏洞成因 1. 未校验用户输入合法性 2. 允许使用绝对路径或路径穿越符号(`../`) 3. 未限制文件访问目录范围 4. 未对文件后缀进行白名单校验 #### 修复方案 1. **输入过滤**: ```php $allow_files = ['config.inc.php', 'readme.txt']; if(!in_array(basename($file), $allow_files)) { die("非法文件请求"); } ``` 2. **路径限制**: ```php $base_dir = '/var/www/uploads/'; $real_path = realpath($base_dir . $file); if(strpos($real_path, $base_dir) !== 0) { die("路径非法"); } ``` 3. **符号过滤**: ```php $file = str_replace(['../', './'], '', $_GET['file']); ``` 4. **更新框架版本**:升级到Weiphp官方修复版本(需确认官方最新版本号) #### 防御建议 - 使用`chroot`环境限制Web目录 - 设置`open_basedir`限制PHP访问路径 - 禁用危险函数如`readfile()`、`file_get_contents()`等 - 定期进行代码审计(可参考OWASP代码审计指南)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值