欢迎关注我的公众号「测试游记」
大会日程
现场
编写更安全的 Python 代码
站在开发者的角度,在工作中大家最关注的是业务功能是否实现,业务逻辑是否正确,高级别的一些同学的会关注可扩展性等架构层面的问题。然而,大家都有共同特点:在完成工作(编写代码)时,几乎都是正向思维,会假定用户是按产品设计的流程操作的。
例如写用户余额减扣的代码,也只会写 if user.balance >= product.price, 紧接着一句 user.balance -= product.price。实际上这样的语句存在很大的安全隐患。
应用开发者们一般很少去思考自己所编写的代码可能存在的瑕疵和安全漏洞,就算其中有部分同学具有较强的安全意识,对如何编写安全的代码也只是停留在:内存访问别越界,别用eval函数,入参要做非法字符校验。
本演讲主题将分享给大家的是,在利用 Python 编写程序的过程中,有哪些不经意的“正常写法”可能存在安全隐患以及改进做法,使代码变得更安全,并介绍两个用于 Python 代码审查的工具。
小心 eval
import sys
def run(s):
try:
v=eval(s)
except Exception as e:
print(e)
if __name__ == "__main__":
run(sys.argv[1])
$ python test eval.py "__import__("os").system('/bin/sh')"
$ python test eval.py "print(globals())"
小心 input()
python3中输入变量直接执行的问题已经被修复
小心 类型溢出
# python2
$ range(100**100)
OverflowError: range() result has too many items
$ xrange(100**100)
OverflowError: Python int too large to convert to C long
在python3中已经可以正确的处理
小心 assert
可以通过 -o
被跳过
小心 pickle
反序列化后直接进行运行了可调用部分「可能包含恶意代码 __reduce__
」
小心 PyYAML
import yaml
class ShellExp:
def __init__(self,args):
import os
os.system(args)
if __name__ == '__mian__':
payload= "!!python/object/apply:__main__.ShellExp('/bin/sh')"
ymal.load(payload)
!!
在yml中表示强制类型转换
小心 服务端模版注入(SSTI)
url中写入 {{xxx}}
导致模版注入
不要在模版中使用 %s
直接使用 {{var}}
小心 注入攻击
SQL注入
NoSQL注入
程序在接受输入的时候,其可能来自一个攻击者,背后就可能产生注入的风险。
小心PyPI依赖包
Bandit:检查安全问题的攻击的工具
Homebot
通过Python和Telegram搭建一个家用机器人,并介绍一些相关的功能和生态环境
Python3的新特性和改进
随着Python2.x的停止维护时间(2020年1月1日)越来越近,各大流行Python包(Flask,Django,Ipython)也终止了Python2版本的支持。遗留项目切换到Python3的计划也要提上日程。本次主题演讲主要介绍Python3各个版本的新特性,改进,背后的原因,和从Python2代码迁移过来时需要注意的点。
2008年11月发布python3
2009年6月发布python3.1
collections.OrderedDict
collections.Counter
2011年2月发布python3.2
concurrent.futers
2012年9月发布python3.3
yield from
unittest.mock
2014年3月发布python3.4
asyncio
pathlib:面向对象的处理文件路径的库
2015年9月python3.5
async
await
type hints:静态类型检查
2016年11月python3.6
fstring
f"{var}"
2018年6月 python3.7
dataclasses
breakpoint
2019年10月14日 python3.8
:= 海象赋值
人人都爱 DataFrame:Pandas 到 Mars 的进阶之路
Pandas 作为最受数据科学家欢迎的分析库,提供了超多的接口来进行数据处理和分析。然而,在很多具体任务过程中,会遇到性能不尽如人意,但又不知如何优化的情况。本次演讲会介绍 Pandas 的常见优化策略,以及 Pandas 背后的实现原理。最后在常见优化手段都不起作用时,可以使用 Mars DataFrame 来并行和分布式加速计算。
通过各种方式实现从计算各省到杭州的距离的demo
分别比较下面几种方式的速度与资源的消耗
以数据为单位
以行为单位
以列为单位
最终引出分布式计算的 Mars
封装
Mars:分而治之 https://github.com/mars-project/mars
用于Linux内核调试的Python
1) BCC(BPF Compiler Collection, 利用扩展的伯克利包过滤器 eBPF 来高效地跟踪内
核和操作应用程序的工具箱)的 Python 前端解析
2) 深入分析 LISA(Linux Integrated System Analysis, 基于 Python 的 Linux 内核交互
式分析和自动化测试利器)项目
3) 脚本化内核调试器 drgn 简介
4) 在开源 ARM 平台(如树莓派4等)上实践 BCC 和 drgn,以及 LISA 项目的扩展设计
议题涉及的主要技术链接:
https://en.wikipedia.org/wiki/BerkeleyPacketFilter
https://github.com/iovisor/bcc
https://github.com/ARM-software/lisa
https://github.com/osandov/drgn
https://www.raspberrypi.org/products/raspberry-pi-4-model-b/
Python的语法和语义扩展系统
Moshmosh:https://github.com/thautwarm/moshmosh
提供语法和语义的语言 不仅仅是工具 还是思维方式
细说不是胡说,语言不是工具
语言决定思维模型
不同语言实现输出质数有不同的算法
第一门编程语言会决定思维的方式
闪电演讲
这次闪电演讲从上海的5分钟提升到了10分钟,大家明显都有点时间过多的感觉。
没有赶人下去的热闹场景了。
推荐的VScode插件
Project Manager
Git Graph
Line Share
Remote Development
如何做一个体面的程序员
https://gitpitch.com/laixintao/side-project-slide
开发你自己会用到的东西
https://clock.sh/
保持程序可以运行
用PR追踪自己的工作;
尽早的将原型打包上传到 Pypi,方便别人尝试你的项目(推荐Poetry);
将一些计划或者想法赶紧用 issue 记录下来;
骄傲的发布有关自己的项目的动态;
阅读别人的源码
写好测试和自动化
测试实际上是在节省时间; 无聊的工作只做一次.
集中精力
不要刷测试覆盖率,不要纠结
Archive项目,Transfer
Asyncio在云服务自动化测试中的应用
痛点
各产品测试框架自成一套
执行效率低,云资源浪费严重
用例编写复杂
可靠性较低
设计目标
通用性
高效性:提升执行效率,减少资源消耗
易用性:只关注关注点,易于编写与维护
可靠性:误报率低
高效性
使用异步Asyncio
资源池
易用性
面向对象
模版化用例
可靠性
框架可靠性
资源可靠性
感受
这次大会的质量 感觉没有达到来之前的预期。
不和今年的上海站比较,就说和去年的杭州站来比,几个演讲明显很随意,没有准备的感觉非常明显。
不过这个东西真的是众口难调,当讲一些对我耳熟能详的东西的时候,我会饶有兴趣的在心里评点一番。
但是讲到一些完全没有接触过的东西的时候,我就会产生不想听的抵触心理。
使用python一年多了,由对爬虫感兴趣接触,到实际从事自动化测试工作,再到学习各种Web框架。
她真的是非常有意思的一门语言,她已经三十岁了,但是她还是充满活力的活跃在各个领域,离不开一群热爱她的小伙伴,大家都在用自己的能力来使她变得更好。