常见的C、PHP中和特殊的危险函数

PHP中的危险函数

代码执行

函数作用
eval()把字符串作为PHP代码执行
assert()检查一个断言是否为 FALSE,可用来执行代码
preg_replace()执行一个正则表达式的搜索和替换
call_user_func()把第一个参数作为回调函数调用
call_user_func_array()调用回调函数,并把一个数组参数作为回调函数的参数
array_map()为数组的每个元素应用回调函数

命令执行 

函数作用
system()输出并返回最后一行shell结果
exec()执行一个外部程序
shall_exec()通过shell环境执行命令,并且将完整的输出以字符串的方式返回
passthru()执行外部程序并且显示原始输出
pcntl_exec()在当前进程空间执行指定程序
popen()打开进程文件指针
proc_open()执行一个命令,并且打开用来输入/输出的文件指针

 包含函数

函数作用
require()在变量可控的情况下,我们可以包含任意文件,从而达到getshell的目的
另外,在不同的配置环境下,可以包含不同的文件
include()
require_once()
include_once()

文件函数操作函数

函数作用
copy()拷贝
file_get_contents将整个文件读入一个字符串
file_put_contents将一个字符串写入文件
feil()把整个文件读入一个数组中
fopen()打开文件或者url
move_uploaded_file()将上传的文件移动到新位置
readfeil()输出文件
rename()重命名一个文件或目录
rmdir()删除目录
unlink & delete删除文件

C语言中的危险函数 

严重性:很危险

解决方法
gets使用 fgets(buf, size, stdin)
strcpy改为使用 strncpy
strcat改为使用 strncat
sprintf改为使用 snprintf,或者使用精度说明符
scanf使用精度说明符,或自己进行解析
sscanf使用精度说明符,或自己进行解析
fscanf使用精度说明符,或自己进行解析
vfscanf使用精度说明符,或自己进行解析
vsprintf改为使用 vsnprintf,或者使用精度说明符
vscanf使用精度说明符,或自己进行解析
vsscanf使用精度说明符,或自己进行解析
streadd确保分配的目的地参数大小是源参数大小的四倍
strecpy确保分配的目的地参数大小是源参数大小的四倍
strtrns手工检查来查看目的地大小是否至少与源字符串相等

很危险(或稍小,取决于实现)

realpath分配缓冲区大小为 MAXPATHLEN,或手工检查参数以确保输入参数不超过 MAXPATHLEN
syslog在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小
getopt在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小
getopt_long在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小
getpass在将字符串输入传递给该函数之前,将所有字符串输入截成合理的大小

中等危险(前四)、低危险(后八) 

函数解决方法
getchar如果在循环中使用该函数,确保检查缓冲区边界
getc如果在循环中使用该函数,确保检查缓冲区边界
fgetc如果在循环中使用该函数,确保检查缓冲区边界
read如果在循环中使用该函数,确保检查缓冲区边界
bcopy确保缓冲区大小与它所说的一样大
fgets确保缓冲区大小与它所说的一样大
memcpy确保缓冲区大小与它所说的一样大
snprintf确保缓冲区大小与它所说的一样大
strccpy确保缓冲区大小与它所说的一样大
strcadd确保缓冲区大小与它所说的一样大
strncpy确保缓冲区大小与它所说的一样大
vsnprintf确保缓冲区大小与它所说的一样大

特殊的危险函数

函数
phpinfo()信息泄露
symlink()软连接-读取文件内容
readlin()

string getenv (string $)

环境变量

bool putenv(string $)

bool dl (string $)加载扩展:载入指定参数的PHP扩展
string ini_get成功时返回配置选项的值
string ini_set(string $,string $)设置指定配置选项的值
void ini_restore(string $)恢复指定的配置选项到它的原始值
bool is_numeric(mixed $var)仅用is_numeric判断而不是用intval转换就有可能插入十六进制的字符串到数据库,进而可能导致sql二次注入
bool in_array()数组相关
array get_defined_vars(void)返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量,服务器变量和用户定义的变量
array get_defined_constants(void)返回当前已定义的常量名和值。这包含define()函数创建的,也包含了所有扩展所创建的
array get_defined_functions(void)返回一个包含所有已定义函数列表的多维数组
array get_include_feils(void)返回所有被include,include_once,require和require_once的文件名
void parse_str(string  &str [, array &$star])如果str是URL传递入的查询字符串(query string ),则将它解析为变量并设置到当前作用域
int extract(array & $var_array [,int $extract_type = EXTR_OVERWRITE [, string $prefix = NULL本函数用来将变量从数组中导入到当前的符号表中,检查每个键名看是否可以作为一个合法的变量名,同事也检查和符号表中已有的变量名的冲突
bool mb_parse_str (string $encoded_string [,array &$result])

解析GET/POST/COOKIE数据并设置全局变量。由于PHP不提供原始POST/COOKIE数据,目前它仅能够用于GET数据。它解析了URL编码过的数据,检测其编码,并转换编码为内部编码,然后设置其值为array的result或者全局变量

bool import_request_variables(string $type [,string $prefix])将GET/POST/Cookie变量导入到全局作用域中,如果你禁用了register_globals, 但又想用到一些全局变量,那么此函数就很有用
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值