IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 基于github_monitor的源代码监控+自动化监控任务生成+webhook实现飞书机器人通知 -> 正文阅读

[开发工具]基于github_monitor的源代码监控+自动化监控任务生成+webhook实现飞书机器人通知

基于github_monitor的源代码监控+自动化监控任务生成+webhook实现飞书机器人通知

1.实现背景

现在很多企业为了防止源代码泄漏,都需要对github进行监控,防止员工将内部代码私自上传到公开的github上。本文也是围绕这一点。

2.GITHUB监控部署

本文采用的项目是 github_monitor,地址 https://github.com/VKSRC/Github-Monitor,相关部署按照官方教程即可比较简单,这里不过多赘述。这个项目的优点如下;

  • 支持一个任务添加多个关键词
  • 匹配模式多
  • 支持屏蔽仓库或作者
  • 可以针对性的设置监控扫描时间

github监控需要添加token才能正常运行,创建token可以参考https://blog.csdn.net/qq_26849933/article/details/125075608

3.自动化监控任务生成

通常情况下,如果我们需要对accesskey之类的大量数据需要监控,手动导致非常麻烦,我们可以通过脚本的方式来实现批量导入,这里提供我写的一个简单的脚本。
只需要配置脚本参数 即可实现全自动的监控任务生成,提供的关键字文本需要按行存放,一个任务的关键词数目均可自由设置。
如base_name =“腾讯云key”,length =15,则会生成按照顺序生成腾讯云key1-15/腾讯云key16-30的任务名称。

#用于批量导入github监控的数据内容
import requests,os,json

#配置参数
base_url = ""  #部署的项目地址
user = ""  #管理员账号的用户名
password = ""  #管理员账号的密码
base_name = " "   #想要批量生成的任务名
start = 1  #任务起始序号
length = 15   #单个监控任务的查询数目
token = ""    #发起请求的token,通过账号密码自动获取
file_path = ''   #需要进行监控的关键字文本,一行一个关键词


#获取 token
def get_token():
    headers = {
                'Content-Type': 'application/json;charset=UTF-8'
            }    
    data = {
        "username":user,
        "password":password
        }
    re = requests.post(url=base_url+"/api/login/", headers=headers, json=data) 
    global token 
    token = json.loads(re.content.decode('utf8').replace("'", '"'))['token']



#添加监控任务
def add_task(name,keywords):
    headers = {
                'Content-Type': 'application/json;charset=UTF-8',
                'Authorization':'Token '+ token
            }
    data ={
        "name":name,
        "keywords":keywords,
        "match_method":1,
        "ignore_org":"",
        "ignore_repo":"",
        "mail":"",
        "pages":5,
        "interval":60
    }
    re = requests.post(url=base_url+"/api/monitor/task.json", headers=headers, json=data)
    if re.status_code ==201:
        print("任务",name,"添加成功!")
    else:
        print("任务",name,"添加失败!",re.status_code)



#处理需要上传数据
def deal_data(base_name,start,length):
    data = ""
    temp = 0
    for line in open(file_path):
        data = data + line
        temp = temp + 1
        start = start + 1
        if temp == length:
            print(data)
            temp = 0
            task_name = base_name + str(start-length) + '-'+ str(start-1)
            add_task(task_name, data)
            data = ''
    if data != '':
        task_name = base_name + str((int)(start/length)*length+1) + '-'+ str(start-1)
        add_task(task_name, data)


get_token()
deal_data(base_name,start,length)

4.接入飞书hook

由于这个项目本身不支持飞书机器人,因此我自己写了一个简单的飞书机器人推送脚本。推送内容包含命中关键字/发现时间/文件名称/命中内容/访问地址这几个基础信息,如有需要可以自行修改。

4.1 系统配置修改

由于github_monitor本身的数据库通过docker启动,只配置了expose参数,不支持外网主机访问,因此我们需要修改项目目录下的docker-compose.yaml文件
将配置中的

expose:
3306

修改成

ports:
	3306:3306

然后重启服务即可

4.2机器人实现

添加机器人的方式很简单,可以参考官方文档 https://open.feishu.cn/document/ukTMukTMukTM/ucTM5YjL3ETO24yNxkjN#d3815c88
这个hook脚本设计的是每次查询最近一个小时内是否有新抓取的未处理监控项
可以挂在服务器上设置需要1小时运行一次的定时任务来处理,具体多久一次 可以按照需求来定,只需更改sql语句上的时间即可。

#github-monitor 飞书钩子脚本

import mysql.connector,requests

#推送消息至飞书
def push_message(data):
    message = {
	"msg_type": "post",
	"content": {
		"post": {
			"zh_cn": {
				"title": "GITHUB监控推送",
				"content": [
					[{
							"tag": "text",
							"text": "命中规则:  {}\n".format(data[1])
						},
                        {
							"tag": "text",
							"text": "发现时间:  {} \n".format(data[13])
						},
                    	{
							"tag": "text",
							"text": "文件名称:  {} \n".format(data[6])
						},
                    	{
							"tag": "text",
							"text": "命中内容:  {} \n".format(data[3])
						},                        
						{
							"tag": "a",
							"text": "详情查看",
							"href": "{}".format(data[4])
						}
					]
				]
			}
		}
	}
}  
    header = { 'Content-Type': 'application/json;charset=UTF-8'}
    re = requests.post(url='飞书hook地址',json=message,headers=header)
    print(re.status_code)
    print(re.content)



#检查是否有新的泄漏通知
def check_update():
    mydb=mysql.connector.connect(
        host="",
    user="",
    passwd="",
    database="github"
    )
    cursor=mydb.cursor()
    cursor.execute("select * from Leakage where add_time > now()-INTERVAL 1 HOUR and status =0")
    dataset = cursor.fetchall()
    if len(dataset)> 0:
        for data in dataset:
            push_message(data)

check_update()
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:17:52  更:2022-06-29 19:18:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 19:33:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码