PHP安全之道学习笔记4:系统命令注入
系统命令注入
我们有时候写代码会用php脚本去调用系统函数完成业务功能,但是一些系统函数属于高危操作,一旦被webshell或者抓住漏洞则后患极大。
下面整理如下风险系统函数.
- exec() 函数
该函数可以执行系统命令,并且返回输出结果到$output中。具体使用请参考官网。
例如 用户访问 http://localhost/exec.php?cmd=ls -al,cmd中的命令将被执行.
<?php
echo exec($_GET["cmd"], $output);
foreach($output as $value) {
echo $value;
}
- system()函数
该函数和exec函数类似,唯一不同是直接返回结果,无需赋值给第二个参数变量。
<?php
system($_GET["cmd"]);
- passthru()函数
该函数也会调用系统命令,并把运行结果二进制数据原样地直接输出到标准输出设备上。
<?php
passthru($_GET["cmd"]);
- shell_exec()函数
这是我比较也喜欢用的函数,通过执行shell命令并返回完整输出字符串,和执行shell效果一样。
<?php
$output = shell_exec($_GET["cmd"]);
echo $output;
- pcntl_exec()函数
pcntl是Linux系统下的一个扩展,可以支持PHP实现多线程。
<?php
pcntl_exec($_GET["cmd"], $_GET["args"]);
为了防止命令注入,我们可以关注的方面比较多,如下:
1.我们可以尽量避免使用这类函数,从业务层面避免从用户端接受到命令。
2.另一方面,如果一定使用,一定不能暴露给用户能直接不鉴权就调用。
3.然后我们也可以设置php.ini配置,将这些可能造成风险的系统调用函数禁用。
只需要将php.ini中的safe_mode设置为On,然后修改如下部分:
disable_functions=exec,system,shell_exec,passthru,popen,pcntl_exec
有人可能会用如果我一定要用到这些函数来实现功能呢?
那我们可以自定义实现,或者在执行的时候将逻辑判断健壮性加强,增加一些必要判断逻辑。
4.使用escapeshellarg()和escapeshellcmd()函数来处理命令参数是一个不错的选择。
5.使用safe_mode_exec_dir指定可执行文件的路径。
在php.ini文件中设置如下:
safe_mode = On
safe_mode_exec_dir = /usr/local/php/bin
参数尽量使用引号包裹,并在拼接的时候使用addslashes函数进行转义。
PHP安全之道学习笔记4:系统命令注入的更多相关文章
- SQL反模式学习笔记21 SQL注入
目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...
- SQLMAP学习笔记1 access注入
SQLMAP学习笔记1 access注入 Sqlmap是开源的自动化SQL注入工具,由Python写成,具有如下特点: 完全支持MySQL.Oracle.PostgreSQL.Microsoft S ...
- SpringMVC:学习笔记(11)——依赖注入与@Autowired
SpringMVC:学习笔记(11)——依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...
- Spring源码学习笔记9——构造器注入及其循环依赖
Spring源码学习笔记9--构造器注入及其循环依赖 一丶前言 前面我们分析了spring基于字段的和基于set方法注入的原理,但是没有分析第二常用的注入方式(构造器注入)(第一常用字段注入),并且在 ...
- Spring 4.0.2 学习笔记(2) - 自动注入及properties文件的使用
接上一篇继续, 学习了基本的注入使用后,可能有人会跟我一样觉得有点不爽,Programmer的每个Field,至少要有一个setter,这样spring配置文件中才能用<property> ...
- postgresql修炼之道学习笔记(1)
好好学习吧. 本笔记 仅作为摘要记录 前两章,主要是数据库对比和安装等. 对比,就比多说了,总是和别人比较,会显得自己身价低,呵呵. 安装也有很多文章,不多说. 第二章提到了一些简单的配置, 其在 d ...
- postgresql修炼之道学习笔记(2)
随后的章节 介绍了基础的sql,这个我略过了,我喜欢在开发的时候,慢慢的研究,毕竟有oracle的基础. 现在,学习psql工具 使用create database创建数据库的时候,出现如下问题: ...
- linux学习笔记-4.系统命令
1.查看主机名 hostname 2.修改主机名(重启后无效) hostname hadoop 3.修改主机名(重启后永久生效) vi /ect/sysconfig/network 4.修改IP(重启 ...
- PHP安全之道学习笔记1:PHP项目安全设置
在全球范围来看,超过了80%的网站是使用php进行搭建的,由于脚本语言和早期版本设计的诸多原因,php项目存在不少安全隐患.从配置选项来看,可以做如下的优化. 1.屏蔽PHP错误输出. 在/etc/p ...
随机推荐
- 在线HTTP POST/GET模拟请求api接口http请求测试工具https://post.jsonin.com/
在线HTTP POST/GET模拟请求api接口http请求测试工具 在线POST/GET接口测试工具https://post.jsonin.com/ Json在线解析及格式化校验工具 https:/ ...
- 13-Node.js学习笔记-MongoDB
数据库相关概念 在一个数据库软件最终可以包含多个数据仓库,在每个数据仓库中可以包含多个数据集合,每个数据集合中可以包含多条文档(具体的数据) database: 数据库,mongoDB数据库软件中可以 ...
- IT兄弟连 HTML5教程 CSS3属性特效 边框
通过CSS3,我们能够创建圆角边框,向矩形添加阴影,使用图片来绘制边框.并且不需使用设计软件,比如photoshop. 1 边框图片border-image border-image为边框应用图片, ...
- Rancher2.x流水线自动化部署
1.概述 由于一些项目使用了rancher进行部署发布,所以使用Rancher的流水线自动部署功能实现CICD,从gitlab.harbor安装,到流水线配置和中间的一些问题一一进行详细介绍解答. 2 ...
- WPF无边框可拖动窗体
下面主要记录下创建无边框窗体,并且可以拖动.这种窗体主要用于弹出小窗体时. <Window x:Class="WpfApplication1.MainWindow" xmln ...
- CAD怎么算面积?这种方法你要知道
在CAD中,打开可能都是用过CAD制图软件,这是一个比较强大的绘图软件,可以绘制出各种类型的CAD图纸文件,还可以将绘制好的图纸面积进行测量.那CAD怎么算面积?其实计算面积的方法有很多中,下面给大家 ...
- cesium 圆圈警戒扫描(附源码下载)
前言 cesium 官网的api文档介绍地址cesium官网api,里面详细的介绍 cesium 各个类的介绍,还有就是在线例子:cesium 官网在线例子,这个也是学习 cesium 的好素材. 内 ...
- C lang:Definition function
Ax_note in parameter for show_n_char() is formal parameter Aa_Definition function #include <stdio ...
- 记,NSProxy需要实现哪些方法?
转注出:https://www.cnblogs.com/xiaobajiu/p/10799962.html 使用NSProxy做替身,代理,多继承,本质上都是用它来转发消息给真身. 观察头文件,NSP ...
- 二、VUE项目BaseCms系列文章:项目目录结构介绍
一. 目录结构截图 二. 目录结构说明 - documents 存放项目相关的文档文件 - api api 数据接口目录 - assets 资源文件目录 - components ...