代码执行定义
应用程序在调用一些能够将字符串转换为代码的函数(如PHP中的eval)时,没有考虑用户是否控制这个字符串,将造成代码执行漏洞。
代码执行的原理
应用程序本身过滤不严, 用户可以通过请求将代码(代码字符串)注入到应用中执行。
代码执行相关函数
1、eval //将字符串当做函数进行执行需要传入一个完整的语句必须以分号。
2、assert //判断是否为字符串是则当成代码执行在php7.0.29之后的版本不支持动态调用
3、call_user_func() //回调函数call_user_func这个函数可以调用其它函数,被调用的函数是call_user_func的第一个函数,被调用的函数的参数是call_user_func的第二个参数。
4、call_user_func_array //把第一个参数作为回调函数调用, 后续参数作为回调函数的参数传入。call_user_func_array 与 call_user_func 这两个函数基本上是相似的,只是在调用传递参数时存在一些差异。
5、create_function()函数 //把用户传递的数据生成一个函数fun(),然后再执行fun() create_function内部会使用eval,将传入的字符串进行eval得到函数体,在执行该函数。
6、array_map()函数 //函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。 回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
7、array_map()函数 //函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致
8、array_filter()函数 //依次将array 数组中的每个值传递到 callback 函数。如果callback函数返回true,则array数组的当前值会被包含在返回的结果数组中。
9、preg_replace()函数 //这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令。
10、uasort()函数 //函数是 PHP 中用于对关联数组(associative array)进行排序的函数。这个函数用于自定义排序规则,允许你按照自己的需求对数组元素进行排序。
11、execute()函数 //执行一个来自于其他ASP文件内部的ASP程序。当其他ASP文件内的程序被请求执行完毕之后,控制器将返回最初发出请求的原始ASP文件.
代码执行的防御
1、禁用或减少使用执行代码的函数
2、对于必须使用eval的地方,一定严格处理用户数据
3、使用addslashes()函数将参数转译,或使用黑白名单校验
4、限制Web用户的权限
5、升级插件、框架新版本
代码执行与命令执行的区别
1、涉及到的函数不同
2、执行的方式不同
标签:func,函数,详解,call,代码执行,数组,array From: https://blog.csdn.net/m0_65409532/article/details/141893147