python - 提交到 github 的 Discord 机器人
问题描述
我之前提出了一个关于如何使用机器人从 github 上“动态地”管理白名单的问题(实际上我没有收到任何答案,但我提出了一个不和谐的答案)。
所以我有一个 github 存储库,所有想要使用我的应用程序的用户都必须被允许这样做。这是由一个 discord 机器人(使用 Python discord 模块构建的)完成的。
当用户想要被添加到白名单时,他必须向机器人发送 DM 命令。因此,所有用户都可以从白名单中管理自己的帐户。
实际上我在这个等待中做了:
- 在我的电脑上创建一个 git repo
- 激活不和谐机器人(也来自我的电脑)
- 每次机器人收到 add-account / remove-account 命令时,它都会编辑白名单文件
- 每小时它会将对文件所做的更改提交到 github。
但我试图了解它是否存在一些严重的“安全”问题,例如是否有人可以看到机器人源代码并对其进行更改或类似的事情。
此外,现在提交更改的推送是由执行此命令的 python 脚本完成的
os.system('git add .')
os.system('git commit -m "whitelist changes. From discord bot')
os.system('git push origin master')
从我的角度来看应该不会太糟糕,但我不知道以这种方式完成这项任务是否有风险
解决方案
没有看到你的源代码,我不能具体说什么,但这里有一些一般性的评论。
Shell 命令会带来很多潜在的安全问题。如果您将未经过滤的用户输入传递给 shell,恶意用户可以利用。例如,假设您希望允许用户创建分支。
command = 'git branch %s' % (branch_name)
os.system(command)
这允许用户执行像 'foo; 这样的代码。回声 0wned'
为避免这种情况,请避免os.system
使用 shell 执行命令。而是使用subprocess.run
which 要求您传入命令及其参数。
subprocess.run(["git", "branch", branch_name])
这不使用 shell,并且不受恶意分支名称的影响。
更好的是,完全避免运行命令并使用库与pygit2等 Git 对话。处理错误更快更容易,尽管它可能有点陌生。
您的 Discord 机器人可以访问您的 Github 帐户,这会暴露您的 Github 帐户。机器人无需推送到 Github。编写一个单独的命令,定期推送到 Github。一个简单的预定工作就可以了。
最后,使用 Git 和 Github 作为数据库非常尴尬。我不确定我是否理解白名单的用途,或者为什么它需要在 Github 上。如果您只想免费存储一些数据,许多托管服务都提供免费套餐。例如,Heroku提供“爱好层”托管。
推荐阅读
- pycharm - PyCharm:自动滚动到结束(运行测试)
- azure-devops - 如何让整个组织都可以使用项目?
- android - 如何仅在一个片段中显示来自工具栏的 SearchView?
- mysql - mysql和mysqlsh/mysqlshell之间查询执行/加载的区别
- python - Discord.py 获取所有公会机器人的名称在 1 个嵌入/消息中
- c - 有时使用 localtime() 函数会出现错误的时间
- android - Flutter 为 Android 和 IOS 设计不同的设计
- python - 如果文件已关闭,为什么我会收到 PermissionError?(Python)
- sql - Power BI - 使用 Dax 根据 Group By 进行筛选
- json - 如何在 Superset 中格式化图表?