跟安全有关的敏感函数

在代码安全审计中,快速定位敏感函数,有助于帮助我们更快发现漏洞。这里就通过实例方式说明一下敏感函数是如何运行的。

1.eval()

该函数把字符串当做php代码来计算,并且字符串必须是合法的php代码,要以分号结尾。

语法eval(phpcode)

实例:

eval('phpinfo();');

?>

2.assert()

该函数会检查一个指定断言。断言是一个逻辑学词汇,主要用于程序员来进行假设判断。断言只有两种类型,字符串型或者布尔型,当断言为false时返回字符串表达式。如果断言是字符串那么会当做php代码执行。

语法assert(phpcode)

实例:

assert('phpinfo();');

?>

3.call_user_func()

把第一个参数作为回调函数调用,后面的参数作为回调函数的参数。

call_user_func('callback()',$callback)

实例:

$a = phpinfo();

call_user_func('eval',$a);

?>

还有call_user_func_array()与之类似,只是传入参数为数组。

4.create_function()

创建匿名函数,此函数返回唯一的函数名称一个字符串,否则出错返回false。

语法creat_funciton($args,$code)$args:一个字符串类型的函数参数$code,字符串类型的函数代码

实例:

$func = create_function('$a,$b', 'return ($a+$b);');

echo $func(10,20);

?>

这就相当于:

function func($a,$b){

return ($a+$b);}

echo func(10,20);

?>

最终输出都是30。

$a = $_GET['a'];

$func = create_function('$a','eval($a);');

$func($a);

?>

5.exec()

命令执行函数,执行一个外部程序,不显示输出。

echoexec('whoami');

?>

exec 执行系统外部命令时不会输出结果,而是返回结果的最后一行。

6.system ()

命令执行函数,执行一个外部程序,显示输出。

phpsystem('whoami');

?>

7.passthru ()

命令执行函数,执行一个外部程序,显示原始输出。常用来执行诸如pbmplus 之类的可以直接输出图像流的命令。通过设置Content-type 为image/gif,然后调用pbmplus 程序输出gif 文件,就可以从PHP 脚本中直接输出图像到浏览器。

passthru('whoami');

?>

8.shell_exec ()

通过shell 环境执行命令,并且将完整的输出以字符串的方式返回。值得一提的是,这个函数跟执行操作符(反引号``)具有等同效力。

echo shell_exec('whoami');

echo "

";

echo `whoami`;

?>

9.fopen(),fclose(),fread(),fwrite()

fopen()函数打开文件或者url。

语法:

fopen(filename,mode,include_path,context)

参数:

filename:必需。规定要打开的文件或url;

mode:必需。规定请求到该文件的访问类型;

其余两个参数可忽略。

这里补充下mode参数的类型总结。

"r" (只读方式打开,将文件指针指向文件头)

"r+" (读写方式打开,将文件指针指向文件头)

"w" (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)

"w+" (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)

"a" (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)

"a+" (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)

"x" (创建一个新的文件并以写入方式打开,如果文件已存在则返回FALSE 和一个错误)

"x+" (创建一个新的文件并以读写方式打开,如果文件已存在则返回FALSE 和一个错误

fclose()函数用于关闭被打开的文件,与fopen配合使用。

语法fclose(file)

fread()函数读取打开的文件。函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行。该函数返回读取的字符串,如果失败则返回FALSE。

语法

fread ( resource $handle , int $length )

参数:

handle:必需。文件系统指针,由fopen打开创建的资源;

length:必需。规定要读取的最大字节数。

fwrite()将内容写入一个打开的文件中。跟fputs()具有同等效力。

语法:

fwrite(file,string,length)

参数:

file:必需。规定要写入的打开文件;

string:必需。规定要写入打开文件的字符串;

length:可选。规定要写入打开文件最大字节数。

综合实例:

$file1= fopen("123.txt", "w");

fwrite($file1,"Hello World. Testing!");

fclose($file1);

$file2 = fopen("123.txt", "r");

echo fread($file2,filesize("123.txt"));

fclose($file2);

?>

10.file_put_contents和file_get_contents

file_put_contents() 函数把一个字符串写入文件中。

该函数访问文件时,遵循以下规则:

1.如果设置了FILE_USE_INCLUDE_PATH,那么将检查filename 副本的内置路径;

2.如果文件不存在,将创建一个文件;

3.打开文件;

4.如果设置了LOCK_EX,那么将锁定文件;

5.如果设置了FILE_APPEND,那么将移至文件末尾。否则,将会清除文件的内容;

6.向文件中写入数据;

7.关闭文件并对所有文件解锁。

实际上整个过程与依次调用fopen(),fwrite() 以及fclose() 功能一样。如果成功,该函数将返回写入文件中的字符数。如果失败,则返回False。

语法:

file_put_contents(file,data,mode,context)

参数:

file:必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。

data:必需。规定要写入文件的数据。可以是字符串、数组或数据流。

其他可选可省略。

file_get_contents() 把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。

语法:

file_get_contents(path,include_path,context,start,max_length

参数:

path:必需。规定要读取的文件。

其他可选可省略。

综合实例:

file_put_contents("test.txt","Hello World. Testing!");

echo file_get_contents("test.txt");

?>

11.str_replace()

str_replace() 函数以其他字符替换字符串中的一些字符(区分大小写)。

该函数必须遵循下列规则:

1.如果搜索的字符串是数组,那么它将返回数组。

2.如果搜索的字符串是数组,那么它将对数组中的每个元素进行查找和替换。

3.如果同时需要对数组进行查找和替换,并且需要执行替换的元素少于查找到的元素的数量,那么多余元素将用空字符串进行替换。

4.如果查找的是数组,而替换的是字符串,那么替代字符串将对所有查找到的值起作用。

注释:该函数区分大小写。请使用str_ireplace()函数执行不区分大小写的搜索。

注释:该函数是二进制安全的。

语法

str_replace(find,replace,string,count)

参数:

find:必需。规定查找要查找的值;

replace:必需。规定替换find中查找的值;

string:必需。规定被搜索的字符串;

实例:

echo str_replace("world","chengdu","Hello world!");

?>

12.preg_replace()

preg_replace 函数执行一个正则表达式的搜索和替换。

语法:

preg_replace(pattern , replacement ,subject ,limit,count)

参数:

pattern:必需。要搜索的模式,可以是字符串或一个字符串数组;

replacement:必需。用于替换的字符串或字符串数组;

subject: 必需。要搜索替换的目标字符串或字符串数组.

其余可选可省略。

用法就是:搜索subject 中匹配pattern 的部分,以replacement 进行替换。

这个函数本身没什么特别,关键在于pattern中,如果使用了/e修饰符,那么被替换后的字符串将直接以PHP代码形式执行。

实例运用:

preg_replace("/(.*)/e",$_GET['a'],"123");

?>

13.小结

跟安全有关的敏感函数还有很多比如include(),require(),popen(),proc_open(),highlight_file(),escapeshellcmd()等等,可以自行在官方手册上查询资料。

php敏感函数,PHP中的敏感函数相关推荐

  1. scala 函数中嵌套函数_Scala中的嵌套函数 用法和示例

    scala 函数中嵌套函数 Scala中的嵌套函数 (Nested functions in Scala) A nested function is defined as a function whi ...

  2. oracle中转换函数,Oracle中的转换函数

    Oracle中的转换函数有三个,分别为to_char(),to_date(),to_number() 1.to_char()的用法 格式化当前的日期时间 select sysdate,to_char( ...

  3. java中的string函数_java中string.trim()函数的作用实例及源码

    trim()的作用:去掉字符串首尾的空格. public static void main(String arg[]){ String a=" hello world "; Str ...

  4. python里面map函数_python中的map()函数

    先来看一下官方文档: map(function, iterable, ...) Apply function to every item of iterable and return a list o ...

  5. c++find函数_Excel中八大经典函数组合,帮你整理齐了

    来源:Excel精英培训 作者:兰色幻想-赵志东 在Excel公式中,有些函数是独行侠,而有些函数经常是成对出现的,今天小编就带大家一起盘点Excel表格中八大经典函数组合. 1.IF + And 作 ...

  6. python中itemgetter函数_Python中的sorted函数以及operator.itemgetter函数

    operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号(即需要获取的数据在对象中的序号),下面看例子. a = [1,2,3] >>> b=op ...

  7. mysql开窗函数over_sql中的开窗函数over()

    今天刷LeetCode的时候看到一道题,题目是这个样子 LeetCode上面要求是用mysql来解决这道题,因为平时我上班的时候大部分时间都是在sqlserver上操作,所以一看到这个题目的要求我脑海 ...

  8. python中range 函数_Python中的range函数

    本篇介绍range函数的特点及如何灵活运用. 工具/原料 Python3.7.5 Windows7环境 方法/步骤 1 查看range函数的帮助信息, range(stop) range(start, ...

  9. java substr函数_oracle 中的substr()函数的用法,以及与java中String.substring()方法的区别...

    oracle 中的substr()函数的规则是 substr( string, start_position, [ length ] ) 说明: string 是要分割的字符串 start_posit ...

最新文章

  1. android系统tee接口,Android操作系统上的TEE / HSM支持
  2. 【笔试面试考试】C++基础知识点[转]
  3. 面向对象PHP之静态延迟绑定
  4. [PAT乙级]1030 完美数列
  5. python逻辑型数据也叫什么_Python入门 | 运算符和数据类型
  6. 王道计算机网络 应用层整理 超详细版
  7. Linux Ubuntu jdk(环境变量)配置
  8. PHP注释php中的注释分为两种:注释和块注释
  9. 小记tensorflow-1:tf.nn.conv2d 函数介绍
  10. 庆祝:黑客x档案官方二级域名转向
  11. 倾斜摄影技术应用之:自动三维建模对输电线路走廊资源快速调查
  12. 2014年中国行地产排行
  13. WiFi产品抗干扰设计
  14. 沧小海笔记本之xilinx srio核的学习记录之目录
  15. python复利计算_如何让Python复利计算器给出正确的答案
  16. volatile修饰变量java_volatile 关键字(修饰变量)
  17. 监控系统看这一篇就够了!zabbix、Prometheus等常见监控教程
  18. 关于nacos配置中心配置不成功的问题
  19. **在一个字符串中寻找另外一个字符串**
  20. BlackBerry 开发笔记入门

热门文章

  1. Python 设计模式 - 工厂模式
  2. Windows 自定义安装 XMind 到指定目录
  3. springcloud openFeign A component required a bean of type ‘ ‘ that could not be found.启动失败
  4. 商品和物料主数据增强
  5. 整理:JVM基本结构
  6. 马震宇-360问答系统(基于HDPHP)
  7. notepad++中Analyse Plugin插件如何使用
  8. USB驱动的概念介绍
  9. web前端开发第一阶段——清除浮动/选择器优先级/特殊转义字符
  10. Android 中自定义View 裁剪扇形图片