Python 安全 -代码审计

杀戮 (有事请 at 大号园长)

| 2014-12-02 12:23

这次来讲关于自动化审计方面的。

OpenStack 团队出品过一个Python代码审计工具叫bandit,思路很牛逼,通过AST模块将源代码转换为Python语法树,由用户自定义对语法树的节点进行测试。

这就需要大致讲下编译器是如何解析源代码的,编译器会先将源代码通过词法分析进行分割,就是说什么算一个词 if 是一个词 “hello world” 也是一个词,然后进行语法分析,语法分析会将词法分析后的结果解析成一个语法树。

比如

代码

if (a == 10) {

printf("hoge\n");

} else {

printf("piyo\n");

}

转换成语法树后

然后会分析语义,比如数据类型啊,逻辑啊,导入的包存不存在之类的,最后会转换成字节码或者别的什么执行。

后面的过程我们就忽略吧,我们的审计过程就是在这个过程进行的。虽然Bandit是基于AST模块的,不过内部应该做了很完善的源码审计实现,我没怎么看源码就是了。

我写个简单的脚本示范,假设我想自动化提取一个变量在一个文件中经过了的操作。

//类checkVal一旦发现变量A就输出其操作类型

class checkVal(ast.NodeVisitor):

def visit_Name(self,node):

info = re.findall("\..+?obj",str(node.ctx))[0][1:-4]

if str(node.id)=="a":

print info

//读取python代码

pyCode = open("F:\\project\\pyproject\\douban\\main.py","r+").read()

//解析

code = ast.parse(pyCode)

//初步遍历代码块

for node in code.body:

checkVal().visit(node)

这是我的main.py

import urllib2

import json

url = "https://api.douban.com/v2/book/user_tags/baalbbb"

def getMessage():

response = urllib2.urlopen(url)

return response

a = json.loads(getMessage().read())

for i in a["tags"]:

print i["title"]

print i["count"]

输出

通过语法树解析,可以做到非常高效,并且误报率极低的代码审计流程,前提是你有耐心写工具,其实并不是只有python,通过语法树是一种编程语言通用的概念,其他语言有没有AST这种方便的模块我不知道,当然你也可以考虑用 bison和 flex写一个通用的框架出来,明年清明我回去看你。

python项目代码审计_Python 安全 -代码审计相关推荐

  1. python项目实践_python实践项目

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 文章节选自<机器学习--python实践>文末评论赠送本书,欢迎留言 ...

  2. python项目结构图_python 项目目录结构设置

    为项目设置目录结构是为了将功能类似的文件放置在同一目录内,增强项目的可读性和可维护性.如果一个python项目功能单一,代码量很小,那就没必要设置的这么复杂. 下图是一个示例项目的目录结构: 1,bi ...

  3. python项目实践_Python 项目实践三(Web应用程序)第二篇

    接着上节的继续学习,使用Django创建网页的过程通常分三个阶段:定义URL.编写视图和编写模板.首先,你必须定义URL模式,每个URL都被映射到特定的视图--视图函数获取并处理网页所需的数据.视图函 ...

  4. python项目结构图_python项目

    泉州信息工程学院 软件学院 课程设计报告书 课 程 名: Python程序设计与高级应用 课程设计项目名称:春晚节目单分析 团队成员: 无 一.项目简介 1.1 项目博客地址 1.2 项目完成的功能与 ...

  5. python项目报告书_python项目

    泉州信息工程学院 软件学院 课程设计报告书 课 程 名:python课程设计 课程设计项目名称:基于Django的音乐网站的设计与实现 团队成员:邹志圣 陈棋明 潘家梁 1.项目介绍 1.1本项目博客 ...

  6. python项目面试_Python面试中最常见的25个问题-结束

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 13)Python中的lambda表达式是什么? lambda表达式是一个匿名函数,通常用作代码行内的嵌入函数. 14)为什么Python中的lambda ...

  7. python项目概述_Python简介

    Python 是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常 ...

  8. python 项目结构图_python+selenium-【六】-完整的项目结构

    |162 | |163 | HEADING |164 | +----------------+ |165 | | | |166 | +----------------+ |167 | |168 | R ...

  9. 70个python项目代码_python项目实例源码

    #_*_ coding:utf-8 _*_ from tkinter import * importrandomimporttimeimporttkinter.messagebox#俄罗斯方块界面的高 ...

最新文章

  1. 重构-改善既有代码的设计:重构原则(二)
  2. 【面试招聘】去不了大厂实习,小厂实习去吗?
  3. Oracle ADF和Oracle Jet一起工作。 建筑模式
  4. python 函数图_如何查看Python函数调用图 Ubuntu
  5. c++中计算2得n次方_PLC-上海会通松下PLC中的数据类型有哪些?
  6. Markdown中跳转,锚点操作浅析
  7. 1333和1600能双通道吗_波音797何时到来?会成为A321XLR的竞争对手吗?
  8. Visual studio 2010 中文版安装Siverlight 5 beta tools 总结
  9. Vue中常用的开发小技巧-让开发更便捷快速-总结
  10. 批量替换 Word 文档某几页
  11. 仿淘宝 图片局部放大效果
  12. 【AI视野·今日CV 计算机视觉论文速览 第157期】Mon, 16 Sep 2019
  13. Codeforces-1008A - Romaji - 水题
  14. 易语言源码利用QQ CK批量导入登录京东/京喜账号,进行登录
  15. 快速有效率的批量查询快递物流并分析
  16. 推荐一款免费的录屏软件
  17. 深圳Python培训学习:Python3 简介--[千锋]
  18. bt5上的一些更新源
  19. 采用数据分析利用加速度计进行电梯速度估算之模型建立
  20. android 双卡双待 发送短信

热门文章

  1. python 布莱克舒尔斯_使用Python自带GUI tkinter编写一个期权价格计算器
  2. 利用matlab求解线性规划,数学建模讲座之三利用matlab求解线性规划问题(linprog函数)...
  3. ISP中gamma矫正模块的FPGA设计和仿真
  4. 前段学习网站学习资料
  5. AWS Lambda 搭配 Amazon API Gateway (REST API)
  6. 记一次laytpl语法踩坑
  7. android绘制黑色画面,Android音视频技术入门之绘制一张图片
  8. Android 获取系统壁纸
  9. 鸿蒙8g服务器版,新版鸿蒙神途服务器
  10. C#如何正确调用大漠