开源检测数据库是否明文存储工具——OpenDLP的使用教程

前言

这些天Darren洋在做项目安全test调研的过程中,发现了一款非常不错的可自定义敏感数据类型的检测数据库是否明文存储工具。

OpenDLP 是一个开源项目,提供用于数据丢失预防(DLP)的工具。它允许自定义扫描规则,包括对数据库中的敏感信息进行自动识别和扫描。尽管 OpenDLP 有一些限制,但作为开源解决方案,它提供了基本的敏感信息检测功能。

一、OpenDLP下载安装

开源社区链接传送带:

https://github.com/hitsz-ids/openDLP

opendlp官方文档:

openDLP --- openDLP documentation

二、数据库连接

1)利用python中的pymysql库连接python服务与数据库通信数据传输。

复制代码
conn = pymysql.connect(
    host="localhost",
    port=3306,
    user='XXX',
    password='XXX',
    database='XXX',
    charset='utf8mb4'
)

2)创建游标并使用sql语句查询数据库日志中的特定表的内容并打印输出。

复制代码
# 创建游标
cursor = conn.cursor()
# sql语句书写
sql = "select * from TABLES where TABLE_SCHEMA='opendlp';"
# 执行sql
cursor.execute(sql)
# 将sql语句查询到的内容全都保存到data变量中
data = cursor.fetchall()
# 关闭数据库连接
cursor.close()
# 打印查询到的所有内容
print(data)

三、自定义test示例

(1)存储csv表格文件

自己定义一个header标题行,再用下面把提取到的数据列表存储csv表格文件中。

使用Python的上下文管理器 (with) 打开一个名为 "c.csv" (文件路径自定义即可)的文件。参数 "w+" 表示以读写模式打开文件。newline="" 参数用于控制行结束符,这里设置为空字符串,通常用于在不同操作系统之间确保一致性。

创建了一个 CSV 写入对象,通常称为 "pen"。这个对象会将数据写入到文件 file 中。

调用 CSV 写入对象的 writerow 方法,将一个标题行(或者叫做标头)写入文件。header 变量列表成为 CSV 文件的第一行。

复制代码
with open("c.csv", "w+", newline="") as file:
    pen = csv.writer(file)
    pen.writerow(header)
    # 遍历data中的每一行,并且转换为列表格式 (默认 tuple)
    for i in data:
        a = list(i)
        pen.writerow(a)

(2)编码转换

使用 pandas 库中的 read_csv 函数来读取CSV 文件。encoding="gbk" 参数指定了文件的字符编码,这是因为文件中包含了中文字符。如果不指定编码,可能会导致字符乱码或错误。

复制代码
# 因为中文字符编码一般都是使用gbk,打开csv文件的时候增加encoding = "gbk",不然会字符乱码报错
data2 = pd.read_csv("c.csv", encoding="gbk")
print(data2.head())

with open('c.csv', 'r', encoding='gbk') as file:
    content = file.read()
with open('c.csv', 'w', encoding='utf-8') as output_file:
    output_file.write(content)

四、用户自定义敏感数据类型识别

可根据opendlp的官方文档,进行用户自定义敏感数据类型识别配置。

openDLP --- openDLP documentation

复制代码
csv_table_path = 'c.csv'
regex_pattern_file = 'G:\openDLP-main\\tests\data\JSONwenjian.json'
threshold = {'email':1}

result = table_analyzer.analyze(csv_table_path, regex_pattern_file, threshold)
print(result)

五、内置敏感数据类型识别

可根据opendlp的官方文档,进行内置敏感数据类型识别配置。

下载的社区资源中内置有14种敏感数据类型,如银行卡号、身份证号码、手机号、邮箱等敏感数据类型。

复制代码
csv_table_path = 'c.csv'   
result = table_analyzer.analyze(csv_table_path)
print(result)

六、运行结果

完成上述,即可运行查看运行结果

七、Plus升级版源码

遍历每个表格,为每个表格创建一个单独的CSV文件,并将数据写入相应的文件中。每个CSV文件的名称将基于表格的名称自动生成。这样你将会有10个(自定义)不同的CSV文件,每个文件包含一个表格的数据。

复制代码
# 处理每个表格并生成单独的CSV文件
for table_name in tables:
    print(f"Table: {table_name}")

    # 获取表的字段名
    cursor.execute(f"DESCRIBE {table_name}")
    columns = [column[0] for column in cursor.fetchall()]
    print("Columns:", columns)

    # 查询表的数据
    cursor.execute(f"SELECT * FROM {table_name}")
    data = cursor.fetchall()

    # 创建单独的CSV文件以保存当前表格的数据
    file_name = f"{table_name}.csv"
    with codecs.open(file_name, "w+", "utf-8") as file:
        pen = csv.writer(file)

        # 将字段名写入CSV文件
        pen.writerow(columns)

        # 遍历data中的每一行,并转换为列表格式
        for row in data:
            a = list(row)
            pen.writerow(a)

如有参数疑问可参考该篇文章:

Open Source-Python sensitive data protection toolkit-糯米PHP

相关推荐
李慕婉学姐7 小时前
【开题答辩过程】以《基于Android的健康助手APP的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
android·java·mysql
森叶7 小时前
手搓一个 Windows 注册表清理器:从开发到 EXE 打包全流程
windows·python
qq_12498707537 小时前
基于springboot健康养老APP的设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·微信小程序·毕业设计
骚戴7 小时前
大语言模型(LLM)进阶:从闭源大模型 API 到开源大模型本地部署,四种接入路径全解析
java·人工智能·python·语言模型·自然语言处理·llm·开源大模型
柒壹漆7 小时前
用Python制作一个USB Hid设备数据收发测试工具
开发语言·git·python
东哥很忙XH7 小时前
python使用PyQt5开发桌面端串口通信
开发语言·驱动开发·python·qt
亚林瓜子7 小时前
mysql命令行手动导入csv数据到指定表
数据库·mysql·gui·csv·cli·db·import
Dxy12393102167 小时前
Python的正则表达式入门:从小白到能手
服务器·python·正则表达式
艾上编程7 小时前
第三章——爬虫工具场景之Python爬虫实战:行业资讯爬取与存储,抢占信息先机
开发语言·爬虫·python
Pyeako7 小时前
网络爬虫相关操作--selenium库(超详细版)
爬虫·python·selenium