首页 > 解决方案 > 提交到 github 的 Discord 机器人

问题描述

我之前提出了一个关于如何使用机器人从 github 上“动态地”管理白名单的问题(实际上我没有收到任何答案,但我提出了一个不和谐的答案)。

所以我有一个 github 存储库,所有想要使用我的应用程序的用户都必须被允许这样做。这是由一个 discord 机器人(使用 Python discord 模块构建的)完成的。

当用户想要被添加到白名单时,他必须向机器人发送 DM 命令。因此,所有用户都可以从白名单中管理自己的帐户。

实际上我在这个等待中做了:

但我试图了解它是否存在一些严重的“安全”问题,例如是否有人可以看到机器人源代码并对其进行更改或类似的事情。

此外,现在提交更改的推送是由执行此命令的 python 脚本完成的

从我的角度来看应该不会太糟糕,但我不知道以这种方式完成这项任务是否有风险

标签: pythongitgithubdiscorddiscord.py

解决方案


没有看到你的源代码,我不能具体说什么,但这里有一些一般性的评论。

Shell 命令会带来很多潜在的安全问题。如果您将未经过滤的用户输入传递给 shell,恶意用户可以利用。例如,假设您希望允许用户创建分支。

command = 'git branch %s' % (branch_name)
os.system(command)

这允许用户执行像 'foo; 这样的代码。回声 0wned'

为避免这种情况,请避免os.system使用 shell 执行命令。而是使用subprocess.runwhich 要求您传入命令及其参数。

subprocess.run(["git", "branch", branch_name])

这不使用 shell,并且不受恶意分支名称的影响。

更好的是,完全避免运行命令并使用库与pygit2等 Git 对话。处理错误更快更容易,尽管它可能有点陌生。


您的 Discord 机器人可以访问您的 Github 帐户,这会暴露您的 Github 帐户。机器人无需推送到 Github。编写一个单独的命令,定期推送到 Github。一个简单的预定工作就可以了。


最后,使用 Git 和 Github 作为数据库非常尴尬。我不确定我是否理解白名单的用途,或者为什么它需要在 Github 上。如果您只想免费存储一些数据,许多托管服务都提供免费套餐。例如,Heroku提供“爱好层”托管。


推荐阅读