(1)原理
当应用在调用一些能将字符串转换成代码的函数时,没有考虑到用户是否能够控制这个字符串传入一些恶意代码,将造成代码注入漏洞。应用有时候会考虑代码的简洁性,灵活性,会在代码中调用 eval之类的函数。
(2)函数
1)php
eval() //把字符串作为PHP代码执行
assert() //检查一个断言是否为 FALSE,可用来执行代码
preg_replace() //执行一个正则表达式的搜索和替换
call_user_func()//把第一个参数作为回调函数调用
call_user_func_array()//调用回调函数,并把一个数组参数作为回调函数的参数
array_map() //为数组的每个元素应用回调函数
2)python
exec(string) # Python代码的动态执行
eval(string) # 返回表达式或代码对象的值
execfile(string) # 从一个文件中读取和执行Python脚本
input(string) #Python2.x 中 input() 相等于 eval(raw_input(prompt)) ,用来获取控制台的输入
compile(string) # 将源字符串编译为可执行对象
(3)代码执行的分类
1)执行代码的函数
eval、assert
2)callback函数
preg_replace+/e模式
3)反序列化
unserialize()–反序列化函数
(4)代码执行的危害
1)执行PHP代码
获取服务器内容或相关信息
2)让网站写shell
利用代码PHP代码功能,往服务器中写入shell脚本
3)控制服务器
利用shell脚本,上传大马,甚至控制服务器
(5)代码
(6)代码执行的防御方法
1.尽量不要使用危险函数
使用json保存属组,当读取时就不要使用eval了
2.对数据进行黑白名单处理
对于必须使用eval的地方,一定要严格处理用户的数据
3.对传入的特殊字符转义
字符串使用单引号包括可控代码,插入前使用addslashes转义(addslashes、魔术引号、htmlspecialchars、htmlentities、msql_real_escape_string)
目录