• 注册
当前位置:1313e > python >正文

python审计分析_如何用python进行代码审计

很显然,在参数不停传递过程中,普通的正则表达式已经无能为力了。这个时候就可以体现Python库丰富的特点。Python官方库中就提供了强大的Python语法分析模块ast。我们可以利用根据ast优化后的PySonar模块,PySonar相对于ast模块而言有性能上的提升,另外是以Python的dict来表示的。

(一)语法树的表示-文件

一个文件中可以有函数,类,它是模块的组成单位。大体结构如下:{"body":[{},{}],"filename":"test.py","type":"module"},这是文件test.py得到的语法树结构,body里面包含两个dict,实际里面会存放函数,类,全局变量或者导入等,它是递归嵌套的,type字段表明类型,在这里是模块,filename则是它的文件名。

(二)语法树的表示-函数

函数的作用就不用多说了,django的view层基本都是以函数为单位的。下面来看一个函数的语法树,如图:

我们简单分析一下这个结构,首先是type,这里是FunctionDef,说明这个结构体是一个函数,_fields中的name,args,body,decorator_list等是函数的基本组成单位。name是函数名称,上述函数名为is_this_subdomain;args是函数的参数,它包含普通参数args,默认参数kwarg;lineno是标明该语句所在的文件的行数;decorator_list则是函数的修饰器,上述为空。

(三)语法树的表示-类

在类的语法树中,包含body,decorator_list,lineno,name,base等字段type是ClassDef,表明该结构为class,body中则包含着函数的结构体,base则是继承的父类。

(四)语法树的表示

接下来我们将以一个if结构片段代码作为示例,来解释Python源码到其语法树的对应关系。片段代码:if type not in ["RSAS", "BVS"]:return HttpResponse("2");

在这个语法树结构中,body里包含着if结构中的语句return

HttpResponse("2"),type为Compare表示该结构体为判断语句,left表示左值即源码中的type,test结构体中则是用来进行if判断,test中的ops对应着源码中的not

in,表示比较判断,comparators则是被比较的元素。这样源码就和Python语法树一一对应起来,有了这些一一对应的基础,就有了判断Python注入问题的原型。

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 162202241@qq.com 举报,一经查实,本站将立刻删除。

最新评论

欢迎您发表评论:

请登录之后再进行评论

登录